有誰知道是否可以將二進制數據從c#插入到SQL字段而不使用存儲過程?將二進制數據從c#插入到SQL中,無需存儲過程
例如 - 轉換爲字節數組到一個base64或類似的東西,然後使用文本如下命令...
String.Format("update A set B = {0} where C = D", Convert.ToBase64String(b));
其中b是一個字節數組。
謝謝
有誰知道是否可以將二進制數據從c#插入到SQL字段而不使用存儲過程?將二進制數據從c#插入到SQL中,無需存儲過程
例如 - 轉換爲字節數組到一個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'
是的,我認爲你可以做參數化查詢。
例子在這裏找到:http://www.akadia.com/services/dotnet_read_write_blob.html
試試這段代碼,或者命令。未註釋的參數或註釋的代碼應該工作。我用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)
我收到以下錯誤什麼工作:「以‘D312E360A25E2E3CFD30A312030206F626A203C3C2F46696C7465722F466C6174654465636F64652F4C656E677468203333363E3E73747265616D0A789C8551D’太長開始標識符的最大長度爲128 \ r \ n'D312E360A25E2E3CFD30A312030206F626A203C3C2F46696C7465722F466C6174654465636F64652F4C656E677468203333363E3E73747265616D0A789C8551D'附近的語法不正確。「 – Grant 2009-12-24 00:29:30
對不起。忘了用引號括起來..謝謝! – Grant 2009-12-24 00:36:08
你能告訴我如何從數據表中獲取數據返回到字節數組? – Grant 2009-12-24 00:49:30