Вызов хранимых процедур, передача значений NULL, работа с логическими значениями - PullRequest
4 голосов
/ 22 января 2010

При вызове хранимой процедуры я объединяю значения вместе, мой вопрос: как вы вызываете хранимую процедуру, но отправляете значение NULL в одном из параметров?

Допустим, AID = null, но если я передам это в свой запрос, я получу ошибку?!

QueryConn.Execute("Search_Res " & Count & "," & AccessList("InvoiceLevel") & "," & AID)

Хорошо, мой следующий вопрос будет о том, как передать логическую переменную?

В моей хранимой процедуре переменная @SearchChildren имеет значение true или false, но как мне определить это, или мне следует использовать int и упростить для себя вещи и просто использовать 0 или 1?

MS SQL Server 2005.

Ответы [ 3 ]

8 голосов
/ 22 января 2010

Похоже, вы пытаетесь выполнить SP, используя специальный запрос, а не объект ADO.Net DBCommand. Разве вы не можете просто добавить "@SearchChildren = null" к вашей строке?

Вы также можете установить значения параметров явно, используя объект команды, это относительно просто.

SqlCommand cmd = new SqlCommand("Search_Res", QueryConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SearchChildren", DBNull.Value);
..
..
values = cmd.Execute();

Извините, C # ... мой VB ржавый.

1 голос
/ 22 января 2010

Измените параметр хранимой процедуры Search_Res на необязательный. @parameter = NULL. Когда передается значение NULL, параметр игнорируется.

CREATE PROCEDURE dbo.foo 
    @param INT = NULL 
AS 
BEGIN ...
0 голосов
/ 22 января 2010

В этом случае, так как вы передаете вызов процедуры и аргументы как литералы, вы хотите, чтобы AID содержал строковое значение "null", а не нулевое значение.

В качестве альтернативы, вы должны рассмотреть возможность использования параметров связывания. Похоже, что ваш язык вызовов VB.NET, поэтому я точно не знаю, как это сделать на этом языке, но есть много ссылок.

Я не использовал SQL Server, но я знаю, что в Oracle запрещается передавать логические переменные в хранимые процедуры. Рекомендуется использовать INT со значением 0 или 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...