OleDb的参数是?,不能带@+column名,去掉再试试看

解决方案 »

  1.   

    参考一下
    http://yistudio.51.net/article/savefiletodb.htm
      

  2.   

    先参考一下:
    用流的方式:
    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();
      

  3.   

    刚刚试过,使用@ + 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 );
      

  4.   

    是system.dll还是system.data.dll出错??
      

  5.   

    楼上的OneDotRed(武装到眼神) 按照你的方法还是出错:
    未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。
      

  6.   

    将insert into image values(@i)改为
    insert into [image] values(@i)
      

  7.   

    能解释一下,为什么用[image]吗????还有如果表里有其它字段呢??是成功了!
      

  8.   

    搞定了。谢谢 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 );