【问题标题】:Error: Must declare the scalar variable "@data"错误:必须声明标量变量“@data”
【发布时间】:2012-05-29 09:20:50
【问题描述】:

当执行到达cmd.ExecuteNonQuery() 时出现错误,上面写着必须声明标量变量:

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = Connection;
cmd.CommandTimeout = 0;

string commandText = "update groups set subjectline ='" +    txtSubjectLine.Text + "',data= @data where groupid = " + ddlGroup.SelectedItem.Value + " ";
cmd.CommandText = commandText;
cmd.CommandType = CommandType.Text;

cmd.Parameters.Add("@Data",OleDbType.VarBinary);
cmd.Parameters["@Data"].Value = binarydata;               
cmd.ExecuteNonQuery();

【问题讨论】:

  • binarydata 已经包含二进制值。
  • SQL 2005 是数据库
  • 如果 txtSubjectLine.Text 包含一些不需要的字符怎么办?尝试将所有这些串联移动到参数中。
  • 仍然出现同样的错误

标签: asp.net


【解决方案1】:

替换

string commandText = "update groups set subjectline ='" +    txtSubjectLine.Text + "',data= @data where groupid = " + ddlGroup.SelectedItem.Value + " ";

string commandText = "update groups set subjectline ='" +    txtSubjectLine.Text + "',data= ? where groupid = " + ddlGroup.SelectedItem.Value + " ";

也就是说,将“@data”替换为“?”在命令文本中。这就是您使用 OleDbCommand 指定参数占位符的方式。


这是经过编辑的原件:

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = Connection;
cmd.CommandTimeout = 0;

cmd.CommandText = "update groups set subjectline ='" + txtSubjectLine.Text + "', data = ? where groupid = " + ddlGroupSelectedItem.Value;
cmd.CommandType = CommandType.Text;

cmd.Parameters.Add("p1", OleDbType.VarBinary);
cmd.Parameters["p1"].Value = binarydata;

cmd.ExecuteNonQuery();

【讨论】:

  • m 得到错误:“没有为一个或多个必需参数提供值。”
  • 当您不指定参数时会发生此错误(例如,使用 cmd.Parameters.Add( )。这是工作代码(简化):OleDbCommand cmd = new OleDbCommand(); cmd.Connection = new OleDbConnection("Data Source=.; Initial Catalog=Titles; Integrated Security=SSPI; Provider=SQLOLEDB;"); cmd.Connection.Open(); cmd.CommandType = CommandType.Text; cmd.CommandText = "更新标题set name = ? where id = 1"; cmd.Parameters.Add("p1", OleDbType.VarWChar); cmd.Parameters["p1"].Value = "new name"; cmd.ExecuteNonQuery();
  • 我刚刚将@data 更改为 ?在上面我提到的代码中,它保持 cmd.Parameters.Add() 不变。然后在执行后我得到'没有为一个或多个必需参数提供值。'
  • 只需将您的部分代码替换为我对答案的编辑中的部分。
【解决方案2】:

此链接显示了有关如何使用 .Write 将二进制数据更新到表的已接受答案

http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/dc1b053d-f0d5-48f8-ad82-fb6d96d27f80

如果这不能解决您的问题,请继续阅读以下内容:

您在声明变量@Data 时使用了变量@data,两者的大小写不同。

在某些条件下,TSQL 中的变量名可能区分大小写,例如,如果 MS Sql 服务器安装时使用区分大小写的排序规则,则表、列、变量名称会区分大小写,即使数据库具有不区分大小写的排序规则。

查看以下链接了解更多详情。

Case sensitive variables in SQL Server

Is SQL syntax case sensitive?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-08-06
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多