4

私はこのサイトを初めて使用しますが、私の問題を解決するためにあなたの何人かが私を助けてくれることを願っています:)

insert-statement を使用して sql-database にデータを保存したいのですが、別のテーブルに対して同じ方法で既に作成しており、うまく機能しています。挿入はデータを挿入しませんが、Visual Web Developer はエラー メッセージを報告しません。

ここに私のコードの一部があります:

public void saveAnswers()
{
    //hier erfolgt das Speichern der Fragen/Antworten in die DB
    List<Question> questionlist = (List<Question>)HttpContext.Current.Session["question"];
    int SurveyID = GetSurveyId(); //SurveyID ist für alle Response-Datensätze gleich


    ArrayList arrAnswerID = new ArrayList();
    ArrayList arrText = new ArrayList();
    ArrayList arrTextID = new ArrayList();

    foreach (Question q in questionlist)
    {
        switch (q.Type)
        {
            case 2: //Freitext
                if (q.Answers.Count > 0)
                {
                    arrAnswerID.Add(0);
                    arrText.Add(q.Answers[0].Text);
                    arrTextID.Add(q.QuestionText[0].TextID);
                }
                break;
            case 3: //Matrixfrage
                foreach (QuestionText qt in q.QuestionText)
                {
                    arrAnswerID.Add(qt.SetAnswer.ID);
                    arrText.Add(qt.SetAnswer.Text);
                    arrTextID.Add(qt.TextID);
                }
                break;
            default: //Einfachauswahl oder Mehrfachauswahl
                foreach (Answer a in q.Answers)
                    if (a.Set)
                    {
                        arrAnswerID.Add(a.ID);
                        arrText.Add(a.Text);
                        arrTextID.Add(q.QuestionText[0].TextID);
                    }
                break;
        }

        //Datenbankzugriff
        for (int i = 0; i < arrAnswerID.Count; i++)
        {
            Command.Connection.Close();
            Command = new SqlCommand();
            Command.CommandText = "INSERT INTO Response (ResponseID, SurveyID, TextID, AnswerID, Text, Comment) VALUES (@ResponseID, @SurveyID, @TextID, @AnswerID, @Text, @Comment)";

            Command.Parameters.AddWithValue("@ResponseID", GetResponseId());
            Command.Parameters.AddWithValue("@SurveyID", SurveyID);
            Command.Parameters.AddWithValue("@TextID", arrTextID[i]);
            Command.Parameters.AddWithValue("@AnswerID", arrAnswerID[i]);
            Command.Parameters.AddWithValue("@Text", arrText[i].ToString());
            Command.Parameters.AddWithValue("@Comment", "");

            Command.CommandType = CommandType.Text;
            Command.Connection = conn;
            Command.Connection.Open();

            Command.ExecuteNonQuery();
            Command.Connection.Close();
        }
        arrAnswerID.Clear();
        arrText.Clear();
        arrTextID.Clear();
    }
}

さらに詳しい情報が必要な場合はお知らせください。回答をお待ちしています。ごきげんよう

4

2 に答える 2

4

Command.ExecuteNonQuery();によって返されるものを確認できますか?

また、デバッグにはsqlプロファイラーを使用できます。これはステップバイステップガイドであり、挿入ステートメントがsqlに送信されるかどうかを通知します。

于 2012-12-19T08:06:28.140 に答える
0

このようにループコードを書き直します

    // Local variable SqlCommand
    SqlCommand Command = new SqlCommand();
    // Text and Comment columns in square brackets, not sure for Comment,
    // but Text is a word used by T-SQL
    Command.CommandText = "INSERT INTO Response (ResponseID, SurveyID, TextID, " + 
                              "AnswerID, [Text], [Comment]) VALUES (@ResponseID, @SurveyID, " + 
                              "@TextID, @AnswerID, @Text, @Comment)";

    // Optimization, create parameters only one time
    Command.Parameters.AddWithValue("@ResponseID", -1);
    Command.Parameters.AddWithValue("@SurveyID", SurveyID);
    Command.Parameters.AddWithValue("@TextID", -1);
    Command.Parameters.AddWithValue("@AnswerID", -1]);
    Command.Parameters.AddWithValue("@Text", string.Empty);
    Command.Parameters.AddWithValue("@Comment", string.Empty);
    Command.CommandType = CommandType.Text;
    Command.Connection = conn;
    Command.Connection.Open();
    for (int i = 0; i < arrAnswerID.Count; i++)
    {
        Command.Parameters["@ResponseID"].Value = GetResponseId();
        Command.Parameters["@TextID"].Value = arrTextID[i];
        Command.Parameters["@AnswerID"].Value = arrAnswerID[i];
        Command.Parameters["@Text"].Value = arrText[i].ToString();
        Command.ExecuteNonQuery();
    }
    Command.Connection.Close();
于 2012-12-19T08:36:47.447 に答える