2014-02-04 3 views
0

Когда я запускаю этот код, я получаю это исключение:SQL Server: вставить параметр NULL, но имеет значение в C#

Не удается вставить значение NULL в столбец «MultipleAnswerNameID», таблица «G2A.dbo.MultipleAnswerName «; столбец не допускает нулей. INSERT терпит неудачу.

MultiAnswerNameID имеет значение, даже когда я отладки ...

Исключение генерируется, когда программа приходит в этот код:

rows += command.ExecuteNonQuery(); 

Мой код:

SqlCommand command = null; 
int rows = 0; 

using (SqlConnection connection = G2ADB.GetConnection()) 
{ 
    connection.Open(); 
    SqlTransaction transaction = connection.BeginTransaction(); 
    int answerID = addAnswer((int)G2A.Type.MultipleAnswer, transaction, connection); 

    try 
    { 
     SqlParameter prmanswerID = new SqlParameter("@answerid", answerID); 

     command = new SqlCommand("INSERT MultipleAnswer (AnswerID) VALUES (@answerid)", connection, transaction); 
     command.Parameters.Add(prmanswerID); 

     rows += command.ExecuteNonQuery(); 

     if (rows == 1) 
     { 
      DebugMess.debugMessage("Added answer"); 
     } 

     rows = 0; 
     DebugMess.debugMessage(answerID.ToString()); 

     for (int i = 0; i < answers.GetLength(0); i++) 
     { 
      command.Parameters.Clear(); 
      command.CommandText = "INSERT MultipleAnswerName (MultipleAnswerName, MultipleAnswerCorrect,MultipleAnswerID) VALUES (@answerName,@answerCor,@multianswerid)"; 

      SqlParameter prmopenanswerid = new SqlParameter("@multianswerid", answerID); 
      SqlParameter prmanswerName = new SqlParameter("@answerName", answers[i, 0]); 
      SqlParameter prmanswerVariable = new SqlParameter("@answerCor", answers[i, 1]); 

      command.Parameters.Add(prmopenanswerid); 
      command.Parameters.Add(prmanswerName); 
      command.Parameters.Add(prmanswerVariable); 

      rows += command.ExecuteNonQuery(); 
     } 

     if (rows == answers.GetLength(0)) 
     { 
      transaction.Commit(); 
      DebugMess.debugMessage("Transaction of the answer committed."); 
     } 
     } 
     catch (Exception ex) 
     { 
      transaction.Rollback(); 
      DebugMess.debugMessage("Transaction of the answer failed.\r\n\r\n" + ex.Message); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
     return answerID; 
+0

does MultiAnswerNameID является вашим основным ключом в таблице MultipleAnswerName? – Angelo

+0

Я думаю, вы просто пропустите, чтобы поместить MultiAnswerNameID в свой оператор insert или если это поле является автономерным, возможно, вы забыли установить для вас спецификацию идентификатора поля да – Angelo

ответ

0

Проверьте свою инструкцию на вставку. Вам не хватает into

INSERT into MultipleAnswer (AnswerID) VALUES (@answerid) 

INSERT into MultipleAnswerName (MultipleAnswerName, MultipleAnswerCorrect,MultipleAnswerID) VALUES 
(@answerName,@answerCor,@multianswerid); 
+0

Я пробовал. Он по-прежнему дает ту же ошибку. Thx в любом случае! –

+0

@RafVandelaer Могу ли я узнать, почему вы используете строки + = command.ExecuteNonQuery(); –

+0

Чтобы проверить, сколько строк обновлено/изменено. Он работает с другими командами sql, это только тот, который делает что-то странное. –

0

Изменение Эта линия

command.CommandText = "INSERT MultipleAnswerName (MultipleAnswerName, MultipleAnswerCorrect,MultipleAnswerID) VALUES (@answerName,@answerCor,@multianswerid)"; 
command = new SqlCommand("INSERT MultipleAnswer (AnswerID) VALUES (@answerid)", connection, transaction); 

С

command.CommandText = "INSERT INTO MultipleAnswerName (MultipleAnswerName, MultipleAnswerCorrect,MultipleAnswerID) VALUES (@answerName,@answerCor,@multianswerid)"; 
command = new SqlCommand("INSERT INTO MultipleAnswer (AnswerID) VALUES (@answerid)", connection, transaction); 

EDIT

Изменение параметра порядка

for (int i = 0; i < answers.GetLength(0); i++) 
{ 
    command.Parameters.Clear(); 
    command.CommandText = "INSERT Into MultipleAnswerName (MultipleAnswerName, MultipleAnswerCorrect,MultipleAnswerID) VALUES (@answerName,@answerCor,@multianswerid)"; 
    SqlParameter prmanswerName = new SqlParameter("@answerName", answers[i, 0]); 
    SqlParameter prmanswerVariable = new SqlParameter("@answerCor", answers[i, 1]); 
    SqlParameter prmopenanswerid = new SqlParameter("@multianswerid", answerID); 

    command.Parameters.Add(prmanswerName); 
    command.Parameters.Add(prmanswerVariable); 
    command.Parameters.Add(prmopenanswerid); 
    rows += command.ExecuteNonQuery(); 
} 
+0

Когда я это делаю, получаю то же исключение: Невозможно вставить значение NULL в столбец «MultipleAnswerNameID», таблицу «G2A.dbo.MultipleAnswerName»; столбец не допускает нулей. INSERT терпит неудачу. Заявление было прекращено. –

+0

Можете ли вы поставить точку прерывания в цикл и убедиться, что получаете значения –

+0

@RafVandelaer У меня есть обновленное решение. Можете ли вы проверить, что –

Смежные вопросы