sql必须声明标量变量错误
Posted
技术标签:
【中文标题】sql必须声明标量变量错误【英文标题】:Sql must declare the scalar variable error 【发布时间】:2016-01-29 13:10:10 【问题描述】:我是 C# 新手,可以使用一些指导,谷歌搜索提供了许多不同的建议,但我无法开始工作。我已经屏蔽了数据源详细信息等,但这些在代码中是有效的
当我点击“保存按钮”时,下面是我的全部代码
public void testLoadAuditBindingNavigatorSaveItem_Click(object sender, EventArgs e)
System.Data.SqlClient.SqlConnection sqlConnection1 =
new System.Data.SqlClient.SqlConnection("Data Source=XXXXX; Initial Catalog=XXXXX; User ID=XXXXX;Password=XXXXX");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT INTO testloadaudit (item_type,load_id,UserId, Comment, dateamended) VALUES (@item_type, @load_id, @UserId, @Comment, @dateamended)";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
我收到此错误
“System.Data.SqlClient.SqlException”类型的未处理异常 发生在 System.Data.dll 附加信息:必须声明标量变量“@item_type”。
如果有人可以建议如何将上述插入到表格中,那就太好了。
【问题讨论】:
你完全没有将参数添加到命令集合中 很明显,您没有将参数添加到命令中。比如你在@item_type
中添加的参数值是多少?
还可以使用using
statement 自动处理您的连接和命令,而不是手动调用Close
或Dispose
方法。
@SonerGönül 该值将是一个变量,具体取决于用户当时通过 Windows 窗体添加的内容,几乎每次都会更改
【参考方案1】:
您在查询文本中使用了参数,但尚未将它们添加到SqlCommand
。
在执行查询之前,您需要为每个参数添加这样的代码:
cmd.Parameters.Add("@item_type", SqlDbType.????);
cmd.Parameters["@item_Type"].Value = ???
您应该在哪里为每个参数指定适当的类型和值。
【讨论】:
您好,@item_type 的值将是数据库中名为 item_type 的列中的一个变量。有没有办法让 Windows 窗体将它们作为变量提取而无需设置值? cmd.Parameters.AddWithValue("@item_type", type); @NinoMirzaMušićAddWithValue
方法通常应该避免。这篇文章准确描述了它的原因:Can we stop using AddWithValue already
@CSys 如何是“@item_type
的值将是数据库中名为 item_type 的列中的变量”如果您要插入 这个值进入指定的列?您必须指定 - 将哪个值放入该列。您究竟希望您的表单如何为您挑选?它应该从什么来源选择?试着解释你的问题。【参考方案2】:
您的 SQL 查询具有期望值的参数:
... VALUES (@item_type, @load_id, @UserId, @Comment, @dateamended)
所以您需要提供这些值。您实际上插入到数据库中的是什么?您提供的值决定了这一点。例如:
cmd.Parameters.AddWithValue("@item_type", "some value");
【讨论】:
嗨,大卫,用户不会每次都输入相同的值,这是我的问题。我有一个包含 12,000 多个唯一代码的列表,这些代码可以作为 @item_type 输入到表单中。所以它需要是用户在输入表单时输入的值,如果这有帮助? @CSys:嗯,当然用用户输入的值。 需要在上面输入什么而不是“一些值”才能获取用户插入的内容?抱歉,使用 Visual Studio 尝试理解大约需要 4 个小时,所以我很挣扎 @CSys:听起来你真的应该从一些关于 .NET 开发的教程开始。无论您在何处获取用户输入,这就是您将在查询参数中使用的内容。也许它在某个地方的变量中,也许它在表单控件中,等等。这取决于你在程序中存储值的位置。【参考方案3】:你必须像这样添加参数:
cmd.Parameters.Add(new SqlParameter() Name = "@item_type", SqlDbType = /* Use your DB Type here */, Value = /* Add your value here */ );
【讨论】:
【参考方案4】:您没有为您的查询添加实际的parameter 值。你可以用SqlParameterCollection.AddWithValue()
添加它:
cmd.CommandText = "INSERT INTO testloadaudit (item_type,load_id,UserId, Comment, dateamended) VALUES (@item_type, @load_id, @UserId, @Comment, @dateamended)";
cmd.Connection = sqlConnection1;
cmd.Parameters.AddWithValue("@item_type", yourActualItemTypeValue);
// add here values for each other parameters
sqlConnection1.Open();
cmd.ExecuteNonQuery();
【讨论】:
以上是关于sql必须声明标量变量错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 ODBC 连接到 SQL SERVER 时,s-s-rS 错误必须声明标量变量