pradeep manne Ответов: 3

Как вставить байтовый массив в SQL-таблицу?


Привет,

Я подготовил шестнадцатеричную строку из массива байтов и использовал ее в запросе для конкатенации. шестнадцатеричная строка будет выглядеть как 0x123456789ABCDEF
hexStr = "0x1234FFCD5";
sql = "Insert into MembersTable
(col1,col2,col3,col4)"
         + "VALUES('" + _GUID + "','" + _Name + "','" + _Pass + "','"
+ hexStr + "');";

будет ли этот процесс работать
я получаю ошибку типа
Implicit conversion from data type varchar to binary is not allowed. Use the CONVERT function to run this query

3 Ответов

Рейтинг:
1

Wendelius

Вместо того чтобы объединять значения в инструкцию SQL, используйте Объект sqlparameter[^].

Заявление может выглядеть примерно так:

sql = "Insert into MembersTable
(col1,col2,col3,col4)"
         + "VALUES(@guid,@name,@pass,@hexstr);";



Теперь, если вы определяете параметр @hexstr для типа binary (см.: http://msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx[^]) вы можете присвоить параметру правильное двоичное значение, и вам не нужно преобразовывать его на стороне базы данных.

Также рассмотрите возможность использования varbinary вместо binary, если длина двоичных данных сильно варьируется.


Рейтинг:
1

Chetan Ghorley

Параметризация запроса может решить эту проблему

hexStr = "0x1234FFCD5";
sql = "Insert into MembersTable(col1,col2,col3,col4) VALUES(@guid, @name, @pass, @hex);";

SqlCommand insertCmd=new SqlCommand(sql, conn); /*Assuming conn is an open SqlConnection*/

insertCmd.Parameters.Add("@guid",_GUID);
insertCmd.Parameters.Add("@name",_Name);
insertCmd.Parameters.Add("@pass",_Pass);
insertCmd.Parameters.Add("@hex",hexStr); 

insetCmd.ExecuteNonQuery();

Если проблема не устранена, пожалуйста, предоставьте полный код.


pradeep manne

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

Рейтинг:
1

devbtl

преобразуйте ваш файл в байт

Byte[] Attimg;
using (FileStream fs = new FileStream(fileURL, FileMode. Open))
{
BinaryReader reader = новый BinaryReader(fs);

Attimg = reader. ReadBytes ((int)fs.Длина);

ПС.Рядом();
}

а затем сохраните его в базе данных..

qry=вставить в таблицу (c1,c2,c3) значения ('"+c1+"','"+c2+"',@c3);

cmd=new sqlcommand(qry, con);

УМК.параметр.addwithvalue(@С3,значения sqldbtype.двоичные).значение=Attimg;

кон.открыть();
УМК.метод executenonquery();
кон.рядом();