2

我需要将报表应用程序的结果数据集保存到 SQL Server 2000 中的表中。我是否可以通过 Byte Array() 以与在数据库中存储文件相同的方式保存数据集?

4

2 回答 2

3

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);在这种情况下使用)。

于 2010-02-23T16:59:48.057 回答
0

您还可以serialize(二进制而不是 xml)您的数据集并保存在数据库中。

于 2010-02-23T17:10:51.503 回答