2010-02-23 79 views
2

我需要保存数据集,报告程序的结果,在SQL Server 2000中执行表我保存的数据集以同样的方式我会存储在数据库中的文件,通过字节数组()?存储XML数据集2000

回答

3

SQL Server 2000是真的不装备精良,以处理XML的斑点。它既没有专用的XML类型,也不容易以VARCHAR(MAX)数据类型的形式支持大型文本。两者都可以在SQL Server 2005及更高版本中使用。

如果你完全肯定是在2000年,最好的选择是将你的XML存储到TEXT列(或NTEXT - 每个字符2个字节) - 如果你需要支持非ASCII类型的字符集,如亚洲语言,希伯来语,阿拉伯语等)。

提醒你,虽然:文本列的数据类型是不是非常有用的,你真的不能做太多它没有很多的麻烦 - 你甚至不能真正的搜索或更换了东西。一团糟。它通常的字符串的方法工作的无 - 这是一个真正的“存储和忘记”之类的斑点.....

UPDATE:如果你将永远需要检查该文件的内容,但它的存储在数据库中(真的?),您还可以使用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);在这种情况下)。

+0

这是一个SQL Server 2000数据库。我只需要存储文件并根据需要加载它们。我不会在文档内搜索等。 – 2010-02-23 17:13:47

+0

我注意到有一个dataset.GetXML()它返回DataSet的字符串表示形式。如果文本数据类型不能用于保存字段? – 2010-02-24 01:46:35

+0

@Saif:是的,当然 - 你可以得到一个表示数据集的XML字符串,并将该字符串存储到SQL Server 2000中的TEXT/NTEXT字段中 – 2010-02-24 05:54:56

0

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