SqlDataReader:将 varbinary 读入字节数组
SqlDataReader: Read varbinary into byte array
我有一个 SQL 服务器 table 和一个 varbinary(max)
列。我用它来存储图像。图片是用 OpenFileDialog
选择的,翻译成 byte[]
像这样
public byte[] ConvertImageToByteArray(String filepath)
{
try
{
return File.ReadAllBytes(filepath);
}
catch (Exception)
{
throw;
}
}
然后使用这行代码存储到数据库中:
sqlCmd.Parameters.Add("@image", SqlDbType.VarBinary).Value = image;
看起来这个存储在数据库中,所以我想一切似乎都按预期工作。
很遗憾,我无法从数据中加载图像table。
我正在使用 SqlDataReader
这样做:
DbSql db = new DbSql();
SqlDataReader dr = db.GetDataReader(sqlCmd);
if (dr.Read())
{
if (!dr.IsDBNull(1))
productName = dr.GetString(1);
if (!dr.IsDBNull(2))
identNumber = dr.GetString(2);
[...]
if (!dr.IsDBNull(23))
comment = dr.GetString(23);
if (!dr.IsDBNull(24))
{
byte[] image = dr.GetSqlBytes(24).Value; // <- This is where I try to grab the image
}
}
我好像无法用
创建一个合适的 byte[]
image = dr.GetSqlBytes(24).Value;
因为我的下一步无法再次将其转为图像:
public Image ConvertImageFromByteArray(byte[] array)
{
try
{
MemoryStream ms = new MemoryStream(array);
return Image.FromStream(ms);
}
catch (Exception) { throw; }
}
编辑:
当尝试类似的东西时
pictureBox.Image = ConvertImageFromByteArray(image)
我收到一个错误说 "Invalid parameter"(自我翻译,德语说 "Ungültiger Parameter")
谁能提供解决方案?
将 varbinary(MAX) 转换为字节数组后
image = (byte[])dr[24];
试试这个..
MemoryStream ms = new MemoryStream(image);
imagePictureBox.Image = System.Drawing.Image.FromStream(ms);
这就是我创建字节数组的方式...
if (File.Exists(sLogoName) == false)
throw new Exception("File Not Found: " + sLogoName);
FileStream sourceStream = new FileStream(sLogoName, FileMode.Open, FileAccess.Read);
int streamLength = (int)sourceStream.Length;
Byte[] byLogo = new Byte[streamLength];
sourceStream.Read(byLogo, 0, streamLength);
sourceStream.Close();
我有一个 SQL 服务器 table 和一个 varbinary(max)
列。我用它来存储图像。图片是用 OpenFileDialog
选择的,翻译成 byte[]
像这样
public byte[] ConvertImageToByteArray(String filepath)
{
try
{
return File.ReadAllBytes(filepath);
}
catch (Exception)
{
throw;
}
}
然后使用这行代码存储到数据库中:
sqlCmd.Parameters.Add("@image", SqlDbType.VarBinary).Value = image;
看起来这个存储在数据库中,所以我想一切似乎都按预期工作。
很遗憾,我无法从数据中加载图像table。
我正在使用 SqlDataReader
这样做:
DbSql db = new DbSql();
SqlDataReader dr = db.GetDataReader(sqlCmd);
if (dr.Read())
{
if (!dr.IsDBNull(1))
productName = dr.GetString(1);
if (!dr.IsDBNull(2))
identNumber = dr.GetString(2);
[...]
if (!dr.IsDBNull(23))
comment = dr.GetString(23);
if (!dr.IsDBNull(24))
{
byte[] image = dr.GetSqlBytes(24).Value; // <- This is where I try to grab the image
}
}
我好像无法用
创建一个合适的byte[]
image = dr.GetSqlBytes(24).Value;
因为我的下一步无法再次将其转为图像:
public Image ConvertImageFromByteArray(byte[] array)
{
try
{
MemoryStream ms = new MemoryStream(array);
return Image.FromStream(ms);
}
catch (Exception) { throw; }
}
编辑:
当尝试类似的东西时
pictureBox.Image = ConvertImageFromByteArray(image)
我收到一个错误说 "Invalid parameter"(自我翻译,德语说 "Ungültiger Parameter")
谁能提供解决方案?
将 varbinary(MAX) 转换为字节数组后
image = (byte[])dr[24];
试试这个..
MemoryStream ms = new MemoryStream(image);
imagePictureBox.Image = System.Drawing.Image.FromStream(ms);
这就是我创建字节数组的方式...
if (File.Exists(sLogoName) == false)
throw new Exception("File Not Found: " + sLogoName);
FileStream sourceStream = new FileStream(sLogoName, FileMode.Open, FileAccess.Read);
int streamLength = (int)sourceStream.Length;
Byte[] byLogo = new Byte[streamLength];
sourceStream.Read(byLogo, 0, streamLength);
sourceStream.Close();