Строковое значение в byte[] С#

Мне нужно сделать запрос, чтобы вставить значение в таблицу SQL. Тип значения — varbinary, и у меня есть строка для вставки с шестнадцатеричным значением. Поэтому я попытался использовать функцию преобразования SQL следующим образом:

using (SqlCommand dbCommand = new SqlCommand("INSERT INTO [Link] ([Record]) values (CONVERT(varbinary,@myrecord);", dbConn))

dbCommand.Parameters.Add("myrecord", System.Data.SqlDbType.VarBinary).Value = recordString;

но у меня есть эта ошибка: не удалось преобразовать значение параметра из строки в байт [].

Итак, я попытался преобразовать свою строку в байт [], но все функции, которые я нашел также на этом сайте, преобразуют мою строку в байт, изменяя ее значение, так что это нехорошо, потому что моя строка имеет внутри значение, которое мне нужно вставить в таблицу.

Резюме: у меня есть строка с этим значением: «0x54000000006C00000000099W043100300030003100», как я могу добавить ее в таблицу SQL с полем varbinary?


person atapi19    schedule 12.01.2016    source источник
comment
Если вы используете функцию CONVERT в своей sqlcommand, почему вы пытаетесь добавить параметр VarBinary? В смысле, разве это не работает? : dbCommand.Parameters.Add("myrecord", System.Data.SqlDbType.VarChar).Value = recordString;   -  person Pikoh    schedule 12.01.2016
comment
когда я попробовал это, значение моей строки преобразуется, а не то, что я хотел.   -  person atapi19    schedule 12.01.2016
comment
Пример не является допустимой шестнадцатеричной строкой, в середине есть W.   -  person Kevin    schedule 12.01.2016


Ответы (2)


Хорошо, думаю, теперь я понимаю. Если вы используете sql server 2008+, вы можете сделать это:

using (SqlCommand dbCommand = new SqlCommand("INSERT INTO [Link] ([Record]) values (CONVERT(varbinary,@myrecord,1);", dbConn))

dbCommand.Parameters.Add("myrecord", System.Data.SqlDbType.VarChar).Value = recordString;

Обратите внимание на 1 в CONVERT(varbinary,@myrecord,1). Кстати, номер примера, который вы нам дали, не является допустимым шестнадцатеричным номером...

Дополнительная информация: Msdn

person Pikoh    schedule 12.01.2016

вы можете и должны быть в состоянии сделать это, убедитесь, что вы настроили размер VarBinary в соответствии с вашим случаем

using(SqlCommand dbCommand = new SqlCommand("INSERT INTO [Link] ([Record]) values(@myrecord);", dbCon))
{
    // Replace 8000, below, with the correct size of the field
    dbCommand.Parameters.Add("@myrecord", System.Data.SqlDbType.VarChar, recordString.Length).Value = recordString;
    dbCommand.ExecuteNonQuery();//wrap around a try catch if you need to catch exceptions
}
person MethodMan    schedule 12.01.2016
comment
Я меняю 8000 на 448 (размер myvarbinary), и снова возникает та же ошибка: не удалось преобразовать значение параметра из строки в байт [] - person atapi19; 12.01.2016
comment
@Heisenberg, возможно, вам придется изменить тип данных на System.Data.SqlDbType.VarChar - person MethodMan; 12.01.2016
comment
@Heisenberg решил проблему - person MethodMan; 12.01.2016