Sql server SQL Server:插入参数null,但在C中有值#
运行此代码时,会出现以下异常: 无法将值NULL插入表“G2A.dbo.MultipleAnswerName”的列“MultipleAnswerNameID”中;列不允许空值。插入失败 MultiAnswerNameID有一个值,即使在调试时 当程序运行到以下代码时引发异常: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
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();
}