如何将字节插入到SQL Server VARBINARY列中

我下面突出显示了一个字节数组,我如何将它插入到SQL Server数据库Varbinary列中?

byte[] arraytoinsert = new byte[10]{0,1,2,3,4,5,6,7,8,9}; string sql = string.format ( "INSERT INTO mssqltable (varbinarycolumn) VALUES ({0});",WHATTODOHERE ); 

在此先感谢你们!

我的解决scheme是使用参数化查询,因为连接对象负责正确地格式化数据(包括确保正确的数据types,并在适用的情况下转义“危险”字符):

 // Assuming "conn" is an open SqlConnection using(SqlCommand cmd = new SqlCommand("INSERT INTO mssqltable(varbinarycolumn) VALUES (@binaryValue)", conn)) { // Replace 8000, below, with the correct size of the field cmd.Parameters.Add("@binaryValue", SqlDbType.VarBinary, 8000).Value = arraytoinsert; cmd.ExecuteNonQuery(); } 

编辑:添加了约翰·桑德斯build议的包装“使用”语句正确处理SqlCommand完成后

尝试这个:

 "0x" + BitConverter.ToString(arraytoinsert).Replace("-", "") 

虽然你应该真的使用参数化的查询,而不是string连接当然…

没有问题,如果你在这种情况下将要使用的所有数组都很小,就像在你的例子中一样。

如果你将这个用于大的blob(例如,将大量的二进制文件存储到一个VARBINARY那么你可能会更好地使用SQL Server中的特定支持来读取/写入这样的大块的子部分)。 比如READTEXTUPDATETEXT ,或者在当前版本的SQL Server SUBSTRING

欲了解更多信息和示例,请参阅我在2006年的.NET杂志( “BLOB + Stream = BlobStream” ,荷兰语,完整的源代码)中的文章,或Peter De Jonghe 在CodeProject上的英文翻译和泛化。 这两个都是从我的博客链接。

查看此图片链接了解所有步骤https://drive.google.com/open?id=0B0-Ll2y6vo_sQ29hYndnbGZVZms

STEP1:我在表中创build了一个varbinarytypes的字段

STEP2:我创build了一个存储过程来接受一个sql_varianttypes的参数

第3步:在我的前端asp.net页面,我创build了一个对象types的sql数据源参数

  <tr> <td> UPLOAD DOCUMENT</td> <td> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="btnUpload" runat="server" Text="Upload" /> <asp:SqlDataSource ID="sqldsFileUploadConn" runat="server" ConnectionString="<%$ ConnectionStrings: %>" InsertCommand="ph_SaveDocument" InsertCommandType="StoredProcedure"> <InsertParameters> <asp:Parameter Name="DocBinaryForm" Type="Object" /> </InsertParameters> </asp:SqlDataSource> </td> <td> &nbsp;</td> </tr> 

第4步:在我的代码后面,我尝试通过使用sql数据源控件通过此存储过程调用从FileUpload Control上载FileBytes

  Dim filebytes As Object filebytes = FileUpload1.FileBytes() sqldsFileUploadConn.InsertParameters("DocBinaryForm").DefaultValue = filebytes.ToString Dim uploadstatus As Int16 = sqldsFileUploadConn.Insert() ' ... code continues ... ' 

你可以这样做,非常简单和高效的解决scheme:我所做的实际上是使用一个参数,而不是基本的占位符,创build一个SqlParameter对象,并使用另一个现有的执行方法。 例如在你的情况下:

 string sql = "INSERT INTO mssqltable (varbinarycolumn) VALUES (@img)"; SqlParameter param = new SqlParameter("img", arraytoinsert); //where img is your parameter name in the query ExecuteStoreCommand(sql, param); 

这应该像一个魅力,只要你有一个开放的SQL连接build立。