Вставить двоичные данные в SQL из C # без хранимой процедуры - PullRequest
5 голосов
/ 24 декабря 2009

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

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

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

где b - байтовый массив.

Спасибо

Ответы [ 3 ]

6 голосов
/ 24 декабря 2009

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

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 '

5 голосов
/ 24 декабря 2009

Попробуйте этот код, либо команда. Параметры, которые не закомментированы, либо закомментированный код должен работать. Я использую 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);
    }
}

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

3 голосов
/ 24 декабря 2009

Да, я думаю, вы можете сделать это с помощью параметризованных запросов.

Пример найден здесь: http://www.akadia.com/services/dotnet_read_write_blob.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...