2016-02-22 113 views
0

我用下面的代码来尝试从一个SQL Server数据库表添加参数给错误 - 必须声明标量变量“@Variable”

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“'

我不知道我错过了什么,因为我有一个实现类似的工作版本。在这种情况下,背景不同但与此代码后的原

//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)

抛出的错误是有一些愚蠢的我已经错过了或者是有一些不兼容我在添加参数值和DataAdapter之间没有意识到?

+0

如果'GetsMyId'可以返回空值,那么你会得到这个错误。您需要确保参数具有非空值。您可以在C#中使用'DBNull.Value'来代替'null'来表示SQL中的空值。 –

+0

GetsMyId被声明为一个私有的int方法,据我所知它不能返回一个空值? – user2874417

+0

什么'GetsMyId(this.Mycombobox.SelectedItem.ToString())'完全返回?你调试了你的代码并看到它了吗?你也试着指'..Add(“@ variable”,SqlDbType.Int).Value..'而不是? –

回答

5

在这一行

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

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

SqlDataAdapter有一个构造采取了命令对象,以及一个以字符串...

+0

您提到的构造函数不会也使用连接字符串?是否分开添加?您只能在使用Command.CommandText时将连接字符串传递给适配器 – user2874417

+0

@ user2874417您的字符串不包含您添加的参数。 – LarsTech

+0

@LarsTech是的。 'WHERE [My Id] = @ variable' ......'Parameters.Add(“@ variable”)' – user2874417