老问题请高手指教:Access数据库对.gif|.jpg图片存入和读出问题,急呀!!!!!!!! OleDb的参数是?,不能带@+column名,去掉再试试看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考一下http://yistudio.51.net/article/savefiletodb.htm 先参考一下:用流的方式:OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb"); mycnn.Open(); OleDbCommand mycmd=new OleDbCommand("update 个人信息 set picture=@a",mycnn ); FileStream mystream=new FileStream("f:\\1.jpg",FileMode.Open,FileAccess.Read); long len=mystream.Length; mycmd.Parameters.Add("@a",OleDbType.Binary,(int)len,"picture"); mycmd.Parameters["@a"].Direction=System.Data.ParameterDirection.Input; byte []box=new byte[len]; mystream.Read(box,0,(int)len-1); mycmd.Parameters["@a"].Value=box; //更新 mycmd.ExecuteNonQuery(); MessageBox.Show("ok"); mystream.Close(); mycnn.Close(); 刚刚试过,使用@ + column 还是可以的。呵呵数据库表名s,只有一个列img写入: OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "All Files|*.*"; if ( dlg.ShowDialog() == DialogResult.OK ) { string fileName = dlg.FileName; FileStream fs = new FileStream( fileName , FileMode.Open , FileAccess.Read ); byte[] buffer = new byte[ fs.Length ]; fs.Read( buffer , 0 , buffer.Length ); fs.Close(); pictureBox1.Image = Image.FromFile( fileName ); OleDbConnection cn = new OleDbConnection( @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Database Password=;Data Source=""C:\a.mdb"";Password=;Jet OLEDB:Engine Type=5;Jet OLEDB:Global Bulk Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:New Database Password=;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Encrypt Database=False" ); cn.Open(); OleDbCommand cmd = new OleDbCommand("INSERT INTO s VALUES ( @img )" , cn ); ((OleDbParameter)cmd.Parameters.Add( "@img" , OleDbType.Binary ) ).Value = buffer; cmd.ExecuteNonQuery(); }读取: OleDbConnection cn = new OleDbConnection( @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Database Password=;Data Source=""C:\a.mdb"";Password=;Jet OLEDB:Engine Type=5;Jet OLEDB:Global Bulk Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:New Database Password=;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Encrypt Database=False" ); cn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter( "SELECT * FROM s" , cn ); DataTable dt = new DataTable(); oda.Fill( dt ); cn.Close(); byte[] buffer = dt.Rows[ 0 ][ 0 ] as byte[]; MemoryStream ms = new MemoryStream( buffer ); pictureBox1.Image = Image.FromStream( ms ); 是system.dll还是system.data.dll出错?? 楼上的OneDotRed(武装到眼神) 按照你的方法还是出错:未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。 将insert into image values(@i)改为insert into [image] values(@i) 能解释一下,为什么用[image]吗????还有如果表里有其它字段呢??是成功了! 搞定了。谢谢 OneDotRed(武装到眼神) 非常感谢!!!!!最后将源程序贴出:Access表结构:表名image字段名称 数据类型 UserId 文本 image1 Ole对象C#源程序:写入: OleConn=new OleDbConnection(); OleConn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Application.StartupPath + @"\db1.mdb"; OleConn.Open(); FileStream fs=new FileStream(this.PathImage,FileMode.Open ,FileAccess.Read ); byte[] ib=new byte[fs.Length]; fs.Read(ib,0,ib.Length); fs.Close(); OleDbCommand cmd = new OleDbCommand("INSERT INTO [image](image1) VALUES (@img )" ,OleConn); ((OleDbParameter)cmd.Parameters.Add( "@img" , OleDbType.Binary )).Value = ib; cmd.ExecuteNonQuery(); OleConn.Close(); MessageBox.Show("写入成功!"); }注意:insert into [表名](图片字段名称)--这里一定要用读出: OleConn=new OleDbConnection(); OleConn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Application.StartupPath + @"\db1.mdb"; OleConn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter( "SELECT image1 FROM [image]" ,OleConn); DataTable dt = new DataTable(); oda.Fill( dt ); OleConn.Close(); byte[] buffer = dt.Rows[1 ][ 0 ] as byte[]; MemoryStream ms = new MemoryStream( buffer ); pictureBox1.Image = Image.FromStream( ms ); 急!!!c# socket的客户端 从c++写的服务端接受数据,怎么写? 全分想赠! 如何往xml标签上加namespace winform读取修改配置文件的问题 如何,在Panel中按下鼠标右键并移动时,Panel中的控件向相反方向移动 一个比较菜的问题,谢谢~ C#中关于grid控件如何写删除数据库代码? ultraGrid1 如何给一个列在下面加一总和。谢谢 请问在C#中如何实再跨库查询呀 如何在textbox1中输入查询条件在textbox2中显示对应的结果? 谁有 XtraGrid 控件源码?? 如何校验机器名 C#的串口读写问题
http://yistudio.51.net/article/savefiletodb.htm
用流的方式:
OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb");
mycnn.Open();
OleDbCommand mycmd=new OleDbCommand("update 个人信息 set picture=@a",mycnn );
FileStream mystream=new FileStream("f:\\1.jpg",FileMode.Open,FileAccess.Read);
long len=mystream.Length;
mycmd.Parameters.Add("@a",OleDbType.Binary,(int)len,"picture");
mycmd.Parameters["@a"].Direction=System.Data.ParameterDirection.Input;
byte []box=new byte[len];
mystream.Read(box,0,(int)len-1);
mycmd.Parameters["@a"].Value=box; //更新
mycmd.ExecuteNonQuery();
MessageBox.Show("ok");
mystream.Close();
mycnn.Close();
数据库表名s,只有一个列img
写入:
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "All Files|*.*";
if ( dlg.ShowDialog() == DialogResult.OK )
{
string fileName = dlg.FileName; FileStream fs = new FileStream( fileName , FileMode.Open , FileAccess.Read );
byte[] buffer = new byte[ fs.Length ];
fs.Read( buffer , 0 , buffer.Length );
fs.Close(); pictureBox1.Image = Image.FromFile( fileName );
OleDbConnection cn = new OleDbConnection( @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Database Password=;Data Source=""C:\a.mdb"";Password=;Jet OLEDB:Engine Type=5;Jet OLEDB:Global Bulk Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:New Database Password=;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Encrypt Database=False" );
cn.Open(); OleDbCommand cmd = new OleDbCommand("INSERT INTO s VALUES ( @img )" , cn );
((OleDbParameter)cmd.Parameters.Add( "@img" , OleDbType.Binary ) ).Value = buffer;
cmd.ExecuteNonQuery();
}读取:
OleDbConnection cn = new OleDbConnection( @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Database Password=;Data Source=""C:\a.mdb"";Password=;Jet OLEDB:Engine Type=5;Jet OLEDB:Global Bulk Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:New Database Password=;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Encrypt Database=False" );
cn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter( "SELECT * FROM s" , cn );
DataTable dt = new DataTable();
oda.Fill( dt ); cn.Close(); byte[] buffer = dt.Rows[ 0 ][ 0 ] as byte[];
MemoryStream ms = new MemoryStream( buffer ); pictureBox1.Image = Image.FromStream( ms );
未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。
insert into [image] values(@i)
Access表结构:表名image
字段名称 数据类型
UserId 文本
image1 Ole对象C#源程序:
写入:
OleConn=new OleDbConnection();
OleConn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Application.StartupPath + @"\db1.mdb";
OleConn.Open();
FileStream fs=new FileStream(this.PathImage,FileMode.Open ,FileAccess.Read );
byte[] ib=new byte[fs.Length];
fs.Read(ib,0,ib.Length);
fs.Close();
OleDbCommand cmd = new OleDbCommand("INSERT INTO [image](image1) VALUES (@img )" ,OleConn);
((OleDbParameter)cmd.Parameters.Add( "@img" , OleDbType.Binary )).Value = ib;
cmd.ExecuteNonQuery();
OleConn.Close();
MessageBox.Show("写入成功!");
}
注意:insert into [表名](图片字段名称)--这里一定要用
读出:
OleConn=new OleDbConnection();
OleConn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Application.StartupPath + @"\db1.mdb";
OleConn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter( "SELECT image1 FROM [image]" ,OleConn); DataTable dt = new DataTable();
oda.Fill( dt );
OleConn.Close(); byte[] buffer = dt.Rows[1 ][ 0 ] as byte[];
MemoryStream ms = new MemoryStream( buffer );
pictureBox1.Image = Image.FromStream( ms );