RT 网上找了好久 都没有解决问题
前提我是把Oracle中表数据导入到Access数据库当中 其中BOLB数据类型我转换成了OLE 对象
首先我读取的时候 代码如下: DbDataReader Reader = MoreDb.ExecuteReader("Select ImageText from TextImage Where Id=1");
while (Reader.Read())
{
//string aa = Reader["IMAGE"].ToString();
//byte aa=Reader.GetSqlBinary(0)
byte[] bytt = (byte[])Reader["ImageText"];
if (bytt != null)
{
MemoryStream buf = new MemoryStream((byte[])Reader["ImageText"]);
//Image image = Image.FromStream(buf);
Bitmap bitmap = new Bitmap(buf); 在此处 无论是image和Bitmap 都爆出错误提示 buf参数无效
pictureBox1.Image = bitmap;
}
else
{
MessageBox.Show("未查询到图片");
}然后我试着存入一个图片二进制数据 代码如下: if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
string str = openFileDialog1.FileName.ToString();
FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
BinaryReader by = new BinaryReader(fs);
int length = (int)fs.Length;
byte[] imgbyte = by.ReadBytes(length);
int aa = MoreDb.ExecuteNonQuery("Insert into ImageText(ImageText)Values(" + imgbyte + ")");//此处总是提示SQL有误 网上查询在插入二进制数据时不能直接这样写
//DbParameter spFile = new DbParameter("@file", DbType.Binary); 我尝试使用这种方法代替可以行不通 } 做过的朋友请帮忙解惑一下!!数据库图片二进制Bitmap
前提我是把Oracle中表数据导入到Access数据库当中 其中BOLB数据类型我转换成了OLE 对象
首先我读取的时候 代码如下: DbDataReader Reader = MoreDb.ExecuteReader("Select ImageText from TextImage Where Id=1");
while (Reader.Read())
{
//string aa = Reader["IMAGE"].ToString();
//byte aa=Reader.GetSqlBinary(0)
byte[] bytt = (byte[])Reader["ImageText"];
if (bytt != null)
{
MemoryStream buf = new MemoryStream((byte[])Reader["ImageText"]);
//Image image = Image.FromStream(buf);
Bitmap bitmap = new Bitmap(buf); 在此处 无论是image和Bitmap 都爆出错误提示 buf参数无效
pictureBox1.Image = bitmap;
}
else
{
MessageBox.Show("未查询到图片");
}然后我试着存入一个图片二进制数据 代码如下: if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
string str = openFileDialog1.FileName.ToString();
FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
BinaryReader by = new BinaryReader(fs);
int length = (int)fs.Length;
byte[] imgbyte = by.ReadBytes(length);
int aa = MoreDb.ExecuteNonQuery("Insert into ImageText(ImageText)Values(" + imgbyte + ")");//此处总是提示SQL有误 网上查询在插入二进制数据时不能直接这样写
//DbParameter spFile = new DbParameter("@file", DbType.Binary); 我尝试使用这种方法代替可以行不通 } 做过的朋友请帮忙解惑一下!!数据库图片二进制Bitmap
Bitmap bitmap = new Bitmap(buf); 总是提示buf参数无效!
我刚才测试了几次 感觉是不是我数据库当中数据的问题 因为这里面的数据是我从Oracle数据库导入到Access数据库当中 开始不是OLE对象是文本类型 我给改过来的
二进制类型的数据更改不了嘛?
// string strComm = " UPDATE IMAGE_LIST Set IMAGE=) "; // strComm += "@photoBinary Where CONTENT_ID='201202132979'"; // OleDbCommand myComm = new OleDbCommand(strComm, myConn); // OleDbParameter[] param = new OleDbParameter[1];
// param[0] = new OleDbParameter("@photoBinary", OleDbType.Binary, imgbyte.Length);
// param[0].Value = imgbyte;
// myComm.Parameters.Add(param[0]);
// myConn.Open();
// myComm.ExecuteNonQuery();
不能直接更改嘛? 好麻烦!!
这个可以有 /// <summary>
/// 把 Base64 转图片
/// </summary>
/// <param name="base64String"></param>
public MemoryStream Base64ToImage(string base64String)
{
// base64String.Substring(0, base64String.Length / 40 * 40) 主要是 Base64 編碼長度有規定必須是 0 或 4 的整數倍,所以為免出錯,把長度處理一下
byte[] imageBytes = Convert.FromBase64String(base64String);
// byte[] imageBytes = Convert.FromBase64String(base64String.Substring(0,128));
MemoryStream _ms = new MemoryStream(imageBytes, 0, imageBytes.Length); // Convert byte[] to Image
_ms.Write(imageBytes, 0, imageBytes.Length);
/*
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); image.Save(Server.MapPath("Report"), ImageFormat.Png);
*/
return _ms;
} // 把图片转 Base64 编码
public string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray(); // Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
2 保存二进制数据,请使用 SQL 参数,不要直接拼接 SQL。