2017-04-26 112 views
0

我試圖插入的byte []到VARBINARY(MAX),在SQL Server列
下面是我的代碼
從數據類型爲varchar隱式轉換爲VARBINARY(最大)是不允許的C#

SqlCommand cmd = new SqlCommand("Insert Into Details values ('@name','@Biometric','@TemplateBytesLength','@date') ", con); 
cmd.Parameters.AddWithValue("name", txt_name.Text.Trim()); 
SqlParameter sqlParam = cmd.Parameters.AddWithValue("@Biometric", bTemplateDataOne); 
sqlParam.DbType = DbType.Binary; 
//cmd.Parameters.AddWithValue("Biometric", bTemplateDataOne); 
cmd.Parameters.AddWithValue("TemplateBytesLength", bTemplateDataOne.Length); 
cmd.Parameters.AddWithValue("date", DateTime.Now); 

cmd.CommandType = CommandType.Text; 
cmd.ExecuteNonQuery(); 
con.Close(); 

bTemplateDataOne是一個字節[]

byte[] bTemplateDataOne; 

我收到的錯誤是從數據類型爲varchar此
隱式轉換爲VARBINARY(最大)是不允許的。使用CONVERT函數來運行此查詢。
爲什麼它不允許將數據插入到SQL表 enter image description here

+0

節目表模式 –

+3

你把你的參數名稱中'''引號 - 意味着你試圖插入文字*字符串*,比如''@ name''而不是'@ name'參數提供的任何東西。 –

+0

這是「bTemplateDataOne」一個字節嗎?看到它 –

回答

1

我認爲更好的解決方案將使用的SqlParameter這樣的:

cmd.Parameters.Add("@Biometric", SqlDbType.VarBinary, 8000).Value = bTemplateDataOne; 
+0

咦?您希望通過將要存儲的數據量乘以4/3並將其存儲爲字符串而不是使用設計爲用於存儲任意字節數據的內置類型來節省數據庫中的空間。 –

+0

這似乎與這個問題無關。建議不要保存任何空間。 – Magnus

+0

@Damien_The_Unbeliever,你說得對。不幸的是我不能刪除這個答案:/我編輯了它,我提出了不同的方法。我希望它更好。 – daniell89

相關問題