如何将字节[]插入SQL Server VARBINARY列

时间:2009-06-30 14:54:36

标签: arrays sql-server

我在下面突出显示了一个字节数组,如何将其插入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
    );

5 个答案:

答案 0 :(得分:78)

试试这个:

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

虽然你当然应该使用参数化查询而不是字符串连接...

答案 1 :(得分:71)

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

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

编辑:添加了John Saunders建议的包装“using”语句,以便在完成后正确处理SqlCommand

答案 2 :(得分:1)

如果您要在此场景中使用的所有阵列都像您的示例中那样小,那就没问题了。

如果你将它用于大blob(例如将大型二进制文件存储大量Mbs甚至大小为Gbs到VARBINARY)那么你可能会更好地使用SQL Server中的特定支持来阅读/写这么大的blob的子部分。诸如READTEXTUPDATETEXT之类的内容,或者当前版本的SQL Server SUBSTRING

有关更多信息和示例,请参阅我在2006年的.NET杂志文章("BLOB + Stream = BlobStream",荷兰语,完整的源代码),或者由Peter de Jonghe撰写的这篇on CodeProject的英文翻译和概括。这两个都来自my weblog

答案 3 :(得分:0)

你可以做这样的事情,非常简单有效的解决方案: 我所做的实际上是使用参数而不是基本占位符,创建了一个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连接,这应该像魅力一样。

答案 4 :(得分:-1)

检查此图片链接是否包含所有步骤 https://drive.google.com/open?id=0B0-Ll2y6vo_sQ29hYndnbGZVZms

第1步:我在表

中创建了一个varbinary类型的字段

第2步:我创建了一个存储过程来接受sql_variant类型的参数

第3步:在我的前端asp.net页面中,我创建了一个对象类型

的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 ... '