是否可以在一个二进制类型的单元格中将DataTable保存到SQL数据库中,然后再将其读回DataTable?
答案 0 :(得分:8)
如果可能的话,我会在sql数据库中创建一个xml字段,并将数据表保存为xml
XML Support in Microsoft SQL Server 2005
和
C# and Vb.net example for XML data type tips in SQL Server 2005
应该帮助你
另一个例子来自here
protected bool LoadXml(SqlConnection cn, XmlDocument doc)
{
//Reading the xml from the database
string sql = @"SELECT Id, XmlField FROM TABLE_WITH_XML_FIELD WHERE Id = @Id";
SqlCommand cm = new SqlCommand(sql, cn);
cm.Parameters.Add(new SqlParameter("@Id",1));
using (SqlDataReader dr = cm.ExecuteReader())
{
if (dr.Read())
{
SqlXml MyXml= dr.GetSqlXml(dr.GetOrdinal("XmlField"));
doc.LoadXml( MyXml.Value);
return true;
}
else
{
return false;
}
}
}
答案 1 :(得分:2)
为什么你想要?
如果这是一项操作,您将不止一次,只需将其保存到新的sql表中,然后从表中读取到您的DataTable中。
答案 2 :(得分:0)
它只是打破了规范化规则 - 单元格中的值不是原子的。
我一直在打破这条规则,但是,理解替代方法仍然很重要。
您可以使用相关的表来存储他们的答案,而不是将所有答案值存储在单个单元格中。
关于下面的评论,您仍然可以使用相关表格进行操作。只需使用三列表:tableID,fieldID,value。每个tableID都可以拥有自己的fieldID集。权衡是使用值数据类型 - 它需要是一个字符串,这意味着您不会在后端获得日期或数字数据类型强制的优势。