2016-02-22 102 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