Я написал кучу общих вспомогательных функций C# в качестве базы для своих SQL-запросов. Все параметры объекта null
преобразуются в DBNull.Value
. Но когда целевой столбец является varbinary
, он сообщает мне, что тип string
несовместим с binary
, и я должен преобразовать.Почему DBNull.Value требует правильного SqlDbType?
Зачем нужен SqlDbType
a DBNull.Value
в C#? И есть ли общий способ обойти это?
// works for nvarchar but throws for varbinary columns
// notice the lack of SqlDbType as I don't know it for a null object
var param1 = new SqlParameter();
param1.Name = "@Param1";
param1.Value = DBNull.Value;
Это нуль ... ему не нужен тип. Сервер SQL знает тип null. В SQL вы говорите [Column] IS NULL
не [Column] IS TYPE NULL
. Таким образом, null является нетипизированным. И целевой столбец разрешен из запроса не SqlDbType
.
Я просто нахожу это очень неинтуитивным (явно набрав нули). Я интересно, если я что-то не хватает ...
код выглядит так:
SqlCommand CreateCommand(string query, params object[] arguments) { ... }
// in here I walk the parameters and build the proper SqlParameter for them.
// this saves me from setting up the SqlParameters by hand.
PS: String = NVARCHAR и Binary означает VARBINARY. Серьезно ... PPS: Не интересует EF или что-нибудь подобное.
Ваш вопрос не совсем ясен. Как преобразование 'string' в' binary' связано с 'DBNull.Value'? Можете ли вы показать конкретный образец кода? –
Откуда? String? Введите изображение? Если это 'DBNull', это не' string'. Это еще одна история ... – DonBoitnott
Также вы можете показать пример кода, который показывает, как вы это делаете? Может быть полезен контекст –