5

执行时出现错误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();
4

2 回答 2

4

代替

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();
于 2012-05-29T10:19:12.300 回答
0

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

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

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

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

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

有关详细信息,请参阅以下链接。

SQL Server 中区分大小写的变量

SQL 语法是否区分大小写?

于 2012-05-29T09:39:58.257 回答