2016-02-22 1 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)

Есть ли что-то глупо, что я пропустил или есть какая-то несовместимость я «Не знаю, между добавлением значений параметров и DataAdapters?

+0

Если 'GetsMyId' может вернуть нулевое значение, вы получите эту ошибку. Вы должны убедиться, что параметры имеют ненулевое значение. вы можете использовать 'DBNull.Value' вместо' null' в C# для представления нулевого значения в 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

Смежные вопросы