代码之家  ›  专栏  ›  技术社区  ›  Saif Khan

在SQL Server 2000中存储XML数据集

  •  2
  • Saif Khan  · 技术社区  · 14 年前

    我需要将数据集(报表应用程序的结果)保存到SQL Server 2000中的表中。我是否像通过byte array()在数据库中存储文件那样保存数据集?

    2 回复  |  直到 14 年前
        1
  •  3
  •   marc_s Hady Salah    14 年前

    SQL Server2000确实没有很好的装备来处理XML blob。它既没有专用的XML类型,也不容易支持varchar(max)数据类型形式的大文本。两者都在SQL Server 2005及更高版本中可用。

    如果您完全并且绝对坚持使用2000,那么最好的选择是将XML存储到 TEXT 列(或) NTEXT -每个字符2个字节-如果需要支持非ASCII类型的字符集,如亚洲语言、希伯来语、阿拉伯语等)。

    不过,请注意:文本列数据类型并不是很有用,因为如果不费吹灰之力,您就无法真正地对其进行搜索或替换。真是一团糟。通常的字符串方法都不适用于它——它实际上是一种“存储并忘记”类型的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等形式从报表输出,则文本/ntext也可以工作(只需使用 cmd.Parameters.Add("@Content", SqlDbType.Text); 那样的话)

        2
  •  0
  •   Adeel    14 年前

    你也可以 serialize (二进制不是XML)您的数据集并保存在数据库中。

    推荐文章