繁体   English   中英

将DataTable存储在SQL的Varbinary列中,然后将Varbinary取回DataTable

[英]Store DataTable in a Varbinary column in SQL and retrieve Varbinary back into DataTable

我有一个DataTable,其中包含我需要处理的所有信息。 我计划将其转换为byte []数组,并将其存储在SQL的Varbinary列中。

这是我的代码,但是由于使用了DataSet,因此我不知道如何直接将其转换为字节:

DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("Name");
DataColumn dc2 = new DataColumn("Age");
DataColumn dc3 = new DataColumn("Gender");

dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);

//adding of inner datatable to outer datatable
dt.Rows.Add("John", "23", "Male");
dt.Rows.Add("Gretchen", "25", "Female");
dt.Rows.Add("Jordan", "28", "Male");

DataSet ds = new DataSet();
ds.Tables.Add(dt);
string xmlString = ds.GetXml();

MemoryStream ms = new MemoryStream();
XmlDocument xml = new XmlDocument();
xml.LoadXml(xmlString);
xml.Save(ms);
byte[] xmlBytes = ms.ToArray();

这是我用来存储数据的代码。 我正在使用Dapper调用存储过程:

using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Configuration.GetConnectionString("TEST_DB")))
            {
                var parameters = new DynamicParameters();
                parameters.Add("@Input_ByteData", xmlBytes);

                connection.Execute("dbo.uspInsertDataIntoVarbinaryColumn", parameters, commandType: CommandType.StoredProcedure);
            }

如何将DataTable存储到SQL Server的Varbinary列中,然后从SQL检索到DataTable中呢?

这里有两个独立的问题:

  1. 如何从BLOB获取DataTable
  2. 如何从SQL Server存储/获取BLOB

海事组织,应将它们分开。

第一个相对简单-使用SerializationFormat.Binary可以比您的代码更有效地完成此工作,该代码需要BinaryFormatter ,但是:

static DataTable FromBytes(byte[] arr)
{
    using (var ms = new MemoryStream(arr))
    {
        return (DataTable)new BinaryFormatter().Deserialize(ms);
    }
}
static byte[] ToBytes(DataTable table)
{
    using (var ms = new MemoryStream())
    {
        table.RemotingFormat = SerializationFormat.Binary;
        new BinaryFormatter().Serialize(ms, table);
        return ms.ToArray();
    }            
}

然后,您所需要做的就是向SQL Server发送一个byte[] ,或从SQL Server发送一个byte[] ,这仅在Dapper中起作用,只需...将byte[]作为参数传递,或将其作为列读出。

但是请注意,将DataTable存储在SQL表的列中听起来有点……“内部平台”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM