Sql server SQL Server:插入参数null,但在C中有值#

Sql server SQL Server:插入参数null,但在C中有值#,sql-server,c#-4.0,Sql Server,C# 4.0,运行此代码时,会出现以下异常: 无法将值NULL插入表“G2A.dbo.MultipleAnswerName”的列“MultipleAnswerNameID”中;列不允许空值。插入失败 MultiAnswerNameID有一个值,即使在调试时 当程序运行到以下代码时引发异常: rows += command.ExecuteNonQuery(); 我的代码: SqlCommand command = null; int rows = 0; using (SqlConnection connec

运行此代码时,会出现以下异常:

无法将值NULL插入表“G2A.dbo.MultipleAnswerName”的列“MultipleAnswerNameID”中;列不允许空值。插入失败

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;
SqlCommand=null;
int行=0;
使用(SqlConnection connection=G2ADB.GetConnection())
{
connection.Open();
SqlTransaction=connection.BeginTransaction();
int answerID=addAnswer((int)G2A.Type.MultipleAnswer,事务,连接);
尝试
{
SqlParameter prmanswerID=新的SqlParameter(“@answerid”,answerid);
command=newsqlcommand(“插入多个answer(AnswerID)值(@AnswerID)”,连接,事务);
命令.Parameters.Add(prmanswerID);
行+=命令。ExecuteOnQuery();
如果(行==1)
{
DebugMess.debugMessage(“添加的答案”);
}
行=0;
DebugMess.debugMessage(answerID.ToString());
for(int i=0;i
检查您的insert语句。您缺少

INSERT into  MultipleAnswer (AnswerID) VALUES (@answerid)

换行

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

编辑

更改参数顺序

 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();
 }
for(int i=0;i
我已经试过了。它仍然会出现同样的错误。.无论如何,Thx!@RafVandelaer我可以知道你为什么使用rows+=command.ExecuteNonQuery()吗;这是为了检查更新/更改了多少行。它适用于其他sql命令,只是这个命令做了一些奇怪的事情。当我这样做时,我得到了相同的异常:无法将值NULL插入列'MultipleAnswerNameID',表'G2A.dbo.MultipleAnswerName';列不允许NULL。insert失败。语句已终止。C在for循环中放入断点,并确保values@RafVandelaer我已经更新了解决方案。你能检查一下吗?我试过了。同样的错误。但是谢谢你帮我解决了一些屏幕问题。这里解决了一些屏幕问题!创建数据库的家伙忘了设置自动编号…“谢谢你的帮助。MultiAnswerNameID IMultipleAnswerName表中的primarykey是什么?我想您只是错过了在insert语句中输入MultiAnswerNameID,或者如果此字段是自动编号,可能您忘记了将字段标识规范设置为“是”
command.CommandText = "INSERT INTO MultipleAnswerName (MultipleAnswerName, MultipleAnswerCorrect,MultipleAnswerID) VALUES (@answerName,@answerCor,@multianswerid)";
command = new SqlCommand("INSERT INTO MultipleAnswer (AnswerID) VALUES (@answerid)", connection, transaction);
 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();
 }