2016-01-12 3 views
1

Мне нужно сделать запрос, чтобы вставить значение в таблицу SQL. Тип значения varbinary, и у меня есть строка для вставки с шестнадцатеричным значением в ней. Так что я пытался использовать SQL Преобразовать функцию:Строковое значение в байте [] C#

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

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

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

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

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

+0

Если вы используете функцию CONVERT в вашем SqlCommand, почему вы пытаетесь добавить параметр VARBINARY? В среднем, не работает ли это: 'dbCommand.Parameters.Add (« myrecord », System.Data.SqlDbType.VarChar) .Value = recordString;' – Pikoh

+0

Когда я это пробовал, значение моей строки преобразуется, а не то, что Я хотел. – Heisenberg

+1

Пример не является допустимой шестнадцатеричной строкой, в середине есть «W». – Kevin

ответ

2

Хорошо, я думаю, теперь я понимаю. Если вы используете SQL сервер 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). Кстати, пример номер, который вы дали нам не действительный номер Hex ...

Подробнее: Msdn

+0

это работает! большое большое спасибо! – Heisenberg

0

вы можете и должны быть в состоянии сделать это убедиться, что вы настраиваете 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 
} 
+0

Я меняю 8000 на 448 (размер myvarbinary), и у меня опять такая же ошибка: не удалось преобразовать значение параметра из строки в байт [] – Heisenberg

+0

проверить мое обновление – MethodMan

+1

@Heisenberg вам может потребоваться изменить тип данных на 'System.Data .SqlDbType.VarChar' – MethodMan

Смежные вопросы