2016-01-11 3 views
0

Я строю запрос MySql в vb.net:Команда Текстовые параметры, как ничто

cmd.CommandText = "Select id INTO @idDep from dBase.tableA where guid in (@strdepToDelete, @strOtherToDelete) and IsDependent = '1'; " & _ 
            "Select id INTO @idOther from dBase.tableA where guid in (@strdepToDelete, @strOtherToDelete) and IsDependent = '0'; " & _ 
            "delete from dBase.tableA where id in(@idDep, @idOther);" 
       cmd.Parameters.Add("@strdepToDelete", MySql.Data.MySqlClient.MySqlDbType.String) 
       cmd.Parameters("@strdepToDelete").Value = strdepToDelete 
       cmd.Parameters.Add("@strOtherToDelete", MySql.Data.MySqlClient.MySqlDbType.String) 
       cmd.Parameters("@strdepToDelete").Value = strOtherToDelete 
       cmd.Parameters.Add("@IdDep", MySql.Data.MySqlClient.MySqlDbType.Int24) 
       cmd.Parameters("@IdDep").Value = Nothing 
       cmd.Parameters.Add("@IdOther", MySql.Data.MySqlClient.MySqlDbType.Int24) 
       cmd.Parameters("@IdOther").Value = Nothing 


       Try 
        cmd.ExecuteNonQuery() 
        success = True 
       Catch ex As Exception 
       End Try 
       Return success 

Ошибка поймана, который указывает на то, что Null cannnot быть @IdDep значение. Я попробовал «» для значения этой переменной; Я пытался ? для значения этой переменной. Когда я запускаю командный текст, полученный от зависания над cmd в MySql, он работает так, как должен. Мой вопрос заключается в том, как параметризовать запросы без значения.

+0

Попробуйте [DbNull] (https://msdn.microsoft.com/en-us/library/system.dbnull (v = vs.110) .aspx) –

+0

Сделал это тоже, и он задохнулся, говоря, что это был тип и не может использоваться как переменная справа от знака равенства –

+0

'DbNull.Value' или' New DbNull() ', тогда ... –

ответ

0

Я не думаю, что ваша проблема - это тип данных, объект команды довольно хорош в выводе DBNull из Nothing. Я думаю, что ваш SQL-запрос является проблемой ...

Если у вас есть инструкция IN, FldNm IN(1,2,NULL), тогда SQL-механизм проанализирует ее как FldNm=1 OR FldNm=2 OR FldNm=NULL. Этот последний элемент недействителен (для SQL вообще, а также для MySQL в частности ... просто попробовал его сделать проверку).

Вы можете запросить записи, где FldNm IS NULL, но не где FldNm = NULL.

Итак - когда вы строите этот оператор SQL, вам нужно будет пропустить значения в вашем разделе IN, если они равны нулю. ИЛИ - используйте некоторое несуществующее значение, если значение равно null как «работа вокруг».

Надеюсь, это полезно!