我有一个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中?
答案 0 :(得分:3)
这里有两个独立的问题:
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();
}
}
,但是:
byte[]
然后,您要做的就是向SQL Server发送一个byte[]
到SQL Server,或者从SQL Server发送一个DataTable
,只需在...中传递using (ClientContext ctx = new ClientContext(url))
{
Web web = ctx.Web;
List list = web.Lists.GetById(listId);
ListItem item = list.GetItemById(itemId);
ctx.Load(item);
ctx.ExecuteQuery();
FieldUrlValue fieldValue = (FieldUrlValue)item["Bild"]; //<-- casting!
string bildUrl = fieldValue.Url; //<-- here you can access the values
}
作为参数,或者将其作为参数读取即可。列。
但是请注意,在SQL表的列中存储{{1}}听起来有点……“内部平台”。