![](/img/trans.png)
[英]Retrieve varbinary data from SQL Server as Excel 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中呢?
這里有兩個獨立的問題:
DataTable
海事組織,應將它們分開。
第一個相對簡單-使用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.