【发布时间】:2012-07-31 13:44:13
【问题描述】:
我的目标是用一些 ID 将 DICOM 文件存储在 SQL Server 中,当用户想要该 DICOM 文件时,他可以使用其相应的 ID 从 SQL Server 下载。该文件在存储到服务器以及从 SQL Server 检索时不应改变其原始性。我正在使用Varbinary(max) 数据类型将DICOM 文件的字节数组存储在SQL Server 中。我正在将 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 Server 中而不会造成任何损失吗?
更新: 下面是我下载 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);
}
【问题讨论】:
-
发布您下载。比如丢失了什么?
-
整个DICOM文件从SQLServer下载后变成不可读格式并保存到本地机器。
-
我从 SQL Server 下载文件时可能做错了,你能帮我如何使用 C# 下载文件并将文件保存到本地机器。
-
您声称拥有无法运行的代码。发布不起作用的下载代码。
-
这个样本必须 byte[] codeproject.com/Articles/225446/…
标签: c# .net sql sql-server-2008 dicom