我需要将报表应用程序的结果数据集保存到 SQL Server 2000 中的表中。我是否可以通过 Byte Array() 以与在数据库中存储文件相同的方式保存数据集?
2 回答
SQL Server 2000 确实不能很好地处理 XML blob。它既没有专用的 XML 类型,也不容易支持 VARCHAR(MAX) 数据类型形式的大文本。两者都在 SQL Server 2005 及更高版本中可用。
如果您绝对且绝对停留在 2000 年,最好的选择是将您的 XML 存储到一个TEXT
列中(或者NTEXT
- 每个字符 2 个字节 - 如果您需要支持非 ASCII 类型的字符集,如亚洲语言、希伯来语、阿拉伯语等) .
但请注意:TEXT 列数据类型不是很有用,因为您无法在没有很多麻烦的情况下对其做很多事情——您甚至无法真正搜索或替换其中的某些内容。一团糟。通常的字符串方法都不起作用 - 它实际上是一种“存储并忘记”类型的 blob ......
更新:如果您永远不需要在文件存储在数据库中时检查文件的内容(真的吗?),您也可以使用IMAGE
数据类型。
要将文件存储在 SQL Server 中,请执行以下操作:
private void AddFileToDatabase(string filename)
{
using(SqlConnection con = new SqlConnection("server=***;database=***;integrated security=SSPI;"))
{
string insertStmt = "INSERT INTO dbo.YourTableName(DocFilename, DocContent) VALUES(@FileName, @Content)";
using(SqlCommand cmd = new SqlCommand(insertStmt, con))
{
cmd.Parameters.AddWithValue("@FileName", filename);
cmd.Parameters.Add("@Content", SqlDbType.Image);
cmd.Parameters["@Content"].Value = File.ReadAllBytes(filename);
con.Open();
int result = cmd.ExecuteNonQuery();
con.Close();
}
}
}
从数据库中读取字节块的内容基本相同。或者你可以把它打包成一个很好的存储过程——完全取决于你。
如果您使用TEXT/NTEXT
,则需要存储一个实际的字符串,例如,您不能真正使用二进制文件(如 Word) - 但如果您从报告中输出 XML 或 HTML 或其他内容,那么 TEXT/NTEXT 也可以工作(只是cmd.Parameters.Add("@Content", SqlDbType.Text);
在这种情况下使用)。
您还可以serialize
(二进制而不是 xml)您的数据集并保存在数据库中。