2010-02-23 77 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)的數據集,並可以保存在數據庫中。