Моя цель - хранить файлы DICOM в SQL Server с некоторым идентификатором, и когда пользователю нужен этот файл DICOM, он может загрузить его с 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 без каких-либо потерь?
Обновление: Ниже приведен мой код для загрузки файла 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);
}