【问题标题】:Adding Parameters giving error - must declare the scalar variable "@variable"添加参数给出错误 - 必须声明标量变量“@variable”
【发布时间】:2016-02-22 15:06:45
【问题描述】:

我正在使用以下代码尝试从 SQL Server 数据库表中返回结果

 MySqlCommand.CommandText = "SELECT * FROM dbo.MyTable WHERE [My Id] = @variable";
 MySqlCommand.Parameters.Add("@variable", SqlDbType.Int).Value = GetsMyId(this.Mycombobox.SelectedItem.ToString());

我尝试过使用 .Parameters.AddWithValue("@variable",value);但我已经阅读了这些缺点并决定改用这种方法。该代码既不适用。返回错误'必须声明标量变量“@variable”'

我不确定我缺少什么,因为我有一个可以实现类似功能的工作版本。但是,在这种情况下,上下文是不同的,此代码遵循原始代码

//Line that fixes it (added at this point) for anyone else that encounters the issue.
//MySqlConnection.connection = MyConnection;

System.Data.SqlClient.SqlDataAdapter Adapter = new System.Data.SqlClient.SqlDataAdapter(MySqlCommand.CommandText, conn.ConnectionString);

DataTable MyDataTable = new DataTable();

Adapter.Fill(MyDataTable);

在最后一行抛出错误Adapter.Fill(MyDataTable)

在添加参数值和 DataAdapters 之间我是否遗漏了一些愚蠢的事情,或者我不知道是否存在一些不兼容?

【问题讨论】:

  • 如果GetsMyId 可以返回空值,那么您将收到此错误。您需要确保参数具有非空值。您可以在 C# 中使用 DBNull.Value 代替 null 在 SQL 中表示空值。
  • GetsMyId 被声明为私有 int 方法,据我所知它不能返回空值?
  • GetsMyId(this.Mycombobox.SelectedItem.ToString()) 究竟返回了什么?你调试过你的代码并看到了吗?你也想用..Add("@variable", SqlDbType.Int).Value.. 代替吗?
  • 还要确保 SQL 和参数之间的拼写相同,除非您真的确实将参数命名为 variable
  • 我正在使用.Parameters.Add("@variable", SqlDbType.Int).Value更新的问题代码来匹配

标签: c# sql-server


【解决方案1】:

在这一行

new System.Data.SqlClient.SqlDataAdapter(MySqlCommand.CommandText, conn.ConnectionString)

...您传入的是 CommandText 而不是对象“MySqlCommand”

SqlDataAdapter 有一个构造函数接受一个命令对象以及一个接受一个字符串...

【讨论】:

  • 您提到的构造函数也不接受连接字符串吗?是单独添加的情况吗?您只能在使用 Command.CommandText 时将连接字符串传递给适配器
  • @user2874417 您的字符串不包含您添加的参数。
  • @LarsTech 是的。 WHERE [My Id] = @variable ...... Parameters.Add("@variable")
  • @Shnugo 如果我使用接受命令而不是连接字符串的构造函数,我会收到错误:'Fill: SelectCommand.Connection property has not been initialized.'
  • @user2874417 您的对象“MySqlCommand”的参数定义正确。但是当你打开你的适配器时,你只使用了CommandText,这些参数仍然没有被使用。使用连接实例化您的命令并使用该对象实例化适配器。想想你在哪里以及如何(如果!!!)使用“MySqlCommand”和“commandBuilder”
猜你喜欢
  • 2017-03-07
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 2014-08-06
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多