我的应用程序运行良好,但客户希望我添加一些功能。 现在,当我运行应用程序时,任何事情都有效,但通过单击执行插入查询的按钮,此消息会发生异常:
The parameterized query '(@ID int,@Subj nvarchar(50),@Pic varbinary(8000),@LetDate date,@' expects the parameter '@Pic', which was not supplied.
那些愚蠢的括号是什么?
这部分程序的代码:
conn.Open();
string sqlcmd = "Insert into Pictures (ID, Subj, Pic, LetDate, LetTitle) Values (@ID, @Subj, @Pic, @LetDate, @LetTitle)";
insertCommand = new SqlCommand(sqlcmd, conn);
// For image data, we save the bytes into the database. We save the image to the JPG format bytes.
insertCommand.Parameters.Add("ID", SqlDbType.Int).Value = (++lastID);
insertCommand.Parameters.Add("Subj", SqlDbType.NVarChar, 50).Value = textBox1.Text;
insertCommand.Parameters.Add("Pic", SqlDbType.VarBinary).Value = dynamicDotNetTwain1.SaveImageToBytes(lastIndex, Dynamsoft.DotNet.TWAIN.Enums.DWTImageFileFormat.WEBTW_JPG);
insertCommand.Parameters.Add("LetDate", SqlDbType.Date).Value = dateTimeSelector1.Value.Value.Date;
insertCommand.Parameters.Add("LetTitle", SqlDbType.NText).Value = titleTextBox1.Text;
index++;
int queryResult = insertCommand.ExecuteNonQuery();
if (queryResult == 1)
MessageBox.Show("تصویر با موفقیت در پایگاه داده ذخیره شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
conn.Close();
答案 0 :(得分:1)
这是程序中其他位置发生的错误,与存储过程执行代码无关。
SQL错误消息“需要参数'@VariableName',这是未提供的。”通常表示您将参数值设置为null。如果您确实打算将NULL传递给查询,则必须使用DBNull.Value值。但是,看起来您正在尝试传递实际值。因此,您的问题来源就是这一行:
insertCommand.Parameters.Add("Pic", SqlDbType.VarBinary).Value = dynamicDotNetTwain1.SaveImageToBytes(lastIndex, Dynamsoft.DotNet.TWAIN.Enums.DWTImageFileFormat.WEBTW_JPG);
如果你能弄清楚为什么dynamicDotNetTwain1.SaveImageToBytes()函数返回null并使该函数按预期工作,那么你的存储过程将按预期工作。
答案 1 :(得分:-1)
我认为你忘了把@
放在变量名的前面......
insertCommand.Parameters.Add("@ID", SqlDbType.Int).Value = (++lastID);
insertCommand.Parameters.Add("@Subj", SqlDbType.NVarChar, 50).Value = textBox1.Text;
insertCommand.Parameters.Add("@Pic", SqlDbType.VarBinary).Value = dynamicDotNetTwain1.SaveImageToBytes(lastIndex, Dynamsoft.DotNet.TWAIN.Enums.DWTImageFileFormat.WEBTW_JPG);
insertCommand.Parameters.Add("@LetDate", SqlDbType.Date).Value = dateTimeSelector1.Value.Value.Date;
insertCommand.Parameters.Add("@LetTitle", SqlDbType.NText).Value = titleTextBox1.Text;