私の目的は、DICOMファイルを何らかのIDでSQL Serverに保存することです。ユーザーがそのDICOMファイルを必要とする場合、対応するIDを使用してSQLServerからダウンロードできます。ファイルは、サーバーへの保存中、およびSQLServerからの取得時に元の状態を変更しないでください。SQLServerにDICOMファイルのバイト配列を格納するためにデータ型を使用してVarbinary(max)
います。DICOMファイルのメモリストリームをバイト配列に変換してから、以下のようにSQLサーバーに保存しています。
using (MemoryStream memStream = new MemoryStream())
{
using (FileStream fileStream = File.Open(txtDICOMFilePath.Text, FileMode.Open))
{
// Copy the file stream to memory stream.
fileStream.CopyTo(memStream);
}
int intL = Convert.ToInt32(memStream.Length);
byte[] objData = new byte[intL];
}
//Set insert query
string qry = "insert into ImagesStore (ID,ImageData) values(@ID, @ImageData)";
//Initialize SqlCommand object for insert.
SqlCommand SqlCom = new SqlCommand(qry, CN);
//We are passing Original Image Path and Image byte data as sql parameters.
SqlCom.Parameters.Add(new SqlParameter("@ID", (object)txtUniqueID.Text));
SqlCom.Parameters.Add(new SqlParameter("@ImageData", (object)objData));
//Open connection and execute insert query.
CN.Open();
SqlCom.ExecuteNonQuery();
CN.Close();
問題: 画像の保存中は正しく保存されますが(例外なく)、取得中は正確なデータが得られません。誰かがDICOMファイルをSQLサーバーに損失なく保存するのを手伝ってくれますか?
更新: 以下は、DICOMファイルをダウンロードするための私のコードです。
qry = "select ImageData from ImagesStore where ID= @ID";
//Initialize SqlCommand object for insert.
SqlCom = new SqlCommand(qry, CN);
SqlCom.Parameters.Add("@ID", SqlDbType.Int).Value = (object)txtUniqueID.Text;
SqlDataAdapter adp = new SqlDataAdapter(SqlCom);
DataTable dt = new DataTable();
try
{
if (CN.State == ConnectionState.Closed)
CN.Open();
adp.Fill(dt);
if (dt.Rows.Count > 0)
{
MemoryStream ms = new MemoryStream((byte[])dt.Rows[0]["ImageData"]);
//Logic to save the file
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
}