2009-12-23 3 views
4

Кто-нибудь знает, можно ли вставить бинарные данные в поле SQL из C# без использования хранимой процедуры?Вставить двоичные данные в SQL из C# без хранимой процедуры

Например - преобразовать массив байтов в base64 или что-то подобное, а затем использовать команду текста, как следующее ...

String.Format("update A set B = {0} where C = D", Convert.ToBase64String(b)); 

где Ь является массив байтов.

Благодаря

ответ

6

Конечно, вы должны использовать параметризованные инструкции, но если вам действительно нужно, вы можете сделать это следующим образом:

byte[] b = null; //(your input should be a byte[]) 
String.Format("update A set B = 0x{0} where C = D", BitConverter.ToString(b).Replace("-", "").ToLower()); 

SQL Server ожидает двоичные данные в виде в шестнадцатеричном формате без дефиса и в нижнем регистре с префиксом '0x'

+0

Я получаю следующее сообщение об ошибке:. «Идентификатор, который начинается с„D312E360A25E2E3CFD30A312030206F626A203C3C2F46696C7465722F466C6174654465636F64652F4C656E677468203333363E3E73747265616D0A789C8551D“слишком длинный Максимальная длина составляет 128. \ Неправильный синтаксис рядом с 'D312E360A25E2E3CFD30A312030206F626A203C3C2F46696C7465722F466C6174654465636F64652F4C656E677468203333363E3E73747265616D0A789C8551D'. " – Grant

+0

извините пренебрежение. забыл заключить в кавычки .. спасибо! – Grant

+0

Можете ли вы рассказать мне, как получить данные обратно в массив байтов из datatable? – Grant

5

Пробуйте этот код либо с помощью команды. Я использую OracleDataClient на работе, так что я взял этот код почти полностью из MSDN

string commandText= "update A set B = @BIN where C = D"; 
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    SqlCommand command = new SqlCommand(commandText, connection); 
    command.Parameters.Add("@BIN", SqlDbType.Binary, b.Length).Value = b;  
    // command.Parameters.AddWithValue("@BIN ", b); 

    try 
    { 
     connection.Open(); 
     Int32 rowsAffected = command.ExecuteNonQuery(); 
     Console.WriteLine("RowsAffected: {0}", rowsAffected); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

редактирования: это предполагает, что б уже байт []. Я просто смотрел на какой-то старый код и обновить параметр на то, что работал для меня (SQL Server 2005)

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