Кто-либо знает ли если ее возможное вставлять двоичные данные в поле SQL от c#, не используя хранимую процедуру?
Например - преобразовывают массив байтов в base64 или что-то как этот и затем используют текстовую команду как следующее...
String.Format("update A set B = {0} where C = D", Convert.ToBase64String(b));
где b является массивом байтов.
Спасибо
Конечно, вы должны использовать параметризованные операторы, но если вам действительно нужно, вы можете сделать это следующим образом:
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 »
Попробуйте использовать этот код: либо команда. Параметры без комментариев, либо код с комментариями должны работать. Я использую 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)
Да, я думаю, вы можете сделать это с помощью параметризованных запросов.
Пример найден здесь: http://www.akadia.com/services/dotnet_read_write_blob.html