2009-12-23 62 views
4

有谁知道是否可以将二进制数据从c#插入到SQL字段而不使用存储过程?将二进制数据从c#插入到SQL中,无需存储过程

例如 - 转换为字节数组到一个base64或类似的东西,然后使用文本如下命令...

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

其中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 \ r \ n'D312E360A25E2E3CFD30A312030206F626A203C3C2F46696C7465722F466C6174654465636F64652F4C656E677468203333363E3E73747265616D0A789C8551D'附近的语法不正确。“ – Grant 2009-12-24 00:29:30

+0

对不起。忘了用引号括起来..谢谢! – Grant 2009-12-24 00:36:08

+0

你能告诉我如何从数据表中获取数据返回到字节数组? – Grant 2009-12-24 00:49:30

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); 
    } 
} 

编辑:这个假设B已经字节]。我只是看了一些旧代码,并更新参数为我(的SQL Server 2005)

相关问题