2017-04-26 42 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

相关问题