Как отправить нулевое значение для параметров значений таблицы в хранимую процедуру в C #?
Отправить нулевое значение в хранимую процедуру
- возможный дубликат Как передать пустую переменную в хранимую процедуру SQL из кода C # .net 17.11.2012
Ответы:
Используйте как это
command.Parameters.AddWithValue("@param", DBNull.Value);
Вот хорошая ссылка на ту же тему
Как передать пустую переменную в хранимую процедуру SQL из кода C # .net
Вы можете перейти по ссылке.
Использование DBNull.Value с SqlParameter без знания sqlDbType?
Однако есть небольшая проблема с использованием DBNull.Value. Допустим, у меня есть бит в процедуре хранилища с именем IO.
в магазине процедура
CREATE PROCEDURE [dbo].[stp_Check]
@IO BIT
Затем в код я добавляю параметр следующим образом.
object parameter = new SqlParameter("IO", true); //using false is the same.
И затем я вызываю процедуру магазина
_repositary.DataContext.Database.SqlQuery<CallDetail>("exec stp_Check @IO", parameter)();
Здесь _repository - мой класс DataRepository с контекстом. Для этого достаточно знать, что он выполнит sp.
Вы можете поймать звонок с помощью профилировщика сервера sql. Это будет сгенерировано следующим образом.
declare @p24 int
set @p24=7
exec sp_executesql N'exec stp_Check @IO', --parameter passed
N'@IO bit', -- parameter with the type passed
@IO=1 --parameter value used when executing the sp
select @p24
Проблема вот в чем. Когда вы создаете параметр с DBNull.Value следующим образом.
object parameter = new SqlParameter("IO", (object)DBNull.Value);
Из профилировщика сервера sql вы можете узнать
declare @p24 int
set @p24=7
exec sp_executesql N'exec stp_Check @IO', --parameter passed
N'@IO nvarchar(4000)', -- the passes type is not boolean
@IO=NULL --parameter value is NULL
select @p24
Верно, что это сработает, но это не то, что задумано. я предпочитаю
using System.Data.SqlTypes;
Вы можете передать значение null следующим образом.
object parameter = new SqlParameter("IO", System.Data.SqlTypes.SqlBoolean.Null );
Тогда запрос такой.
declare @p24 int
set @p24=7
exec sp_executesql N'exec stp_Check @IO', --parameter passed
N'@IO bit', -- the passes type is boolean
@IO=NULL --parameter value is NULL
select @p24
Есть нулевые значения для всех типов sqltypes, таких как int, bigint, datetime и т. Д. Надеюсь на эту помощь. Ваше здоровье. :)
Используйте DBNull.Value
, чтобы передать NULL
.
Вы можете добавить null в качестве значения параметра по умолчанию и не отправлять какое-либо значение, если хотите, чтобы оно было нулевым
ex:
create procedure sp_name(@param1 varhcra(10), @param2 varchar(10)=null)
C#
command.Parameters.AddWithValue("@param1", "value1");
//dont pass any value for param2, it is considered null
sp_
для собственных хранимых процедур! Этот префикс зарезервирован Microsoft для собственного использования. 17.11.2012