I need to save the DataSet, results of a reporting app, to a table in SQL Server 2000. Do I save the datasets the same way I would store files in the DB, via Byte Array()?
2 に答える
SQL Server 2000は、XMLBLOBを処理するための十分な機能を備えていません。専用のXML型はなく、VARCHAR(MAX)データ型の形式の大きなテキストを簡単にサポートすることもできません。どちらもSQLServer2005以降で使用できます。
絶対にそして間違いなく2000に固執している場合、最善のオプションはXMLをTEXT
列に格納することです(またはNTEXT
、アジア言語、ヘブライ語、アラビア語などの非ASCIIタイプの文字セットをサポートする必要がある場合は1文字あたり2バイト) 。
ただし、注意してください。TEXT列のデータ型は、多くの手間をかけずに実際に多くのことを実行できないという点であまり有用ではありません。実際に何かを検索したり置き換えたりすることさえできません。それは混乱です。通常の文字列メソッドはどれも機能しません。これは、実際には「保存して忘れる」種類のBLOBです。
更新:データベースに保存されている間(本当に?)ファイルの内容を検査する必要がないIMAGE
場合は、データ型を使用することもできます。
ファイルをSQLServerに保存するには、次のようにします。
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ではなくバイナリで)データベースに保存することもできます。