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 自动处理您的连接和命令,而不是手动调用CloseDispose 方法。 @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 错误必须声明标量变量

不明白错误信息:必须声明标量变量“@Username”。

vb.net SQL 导致 - “必须声明标量变量”

尝试在 SQL 中运行 UPDATE 语句时“必须声明标量变量”

必须用参数声明标量变量

表变量和错误“必须声明标量变量”