簡體   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