数据库用的是access2003, 里面有一个photo字段,ole Object类型
代码执行插入时报错
string sql = "insert into menu(photo) values(@image)";
OleDbCommand cmd = new OleDbCommand(sql,con);
cmd.Parameters.Add(new OleDbParameter("@image", OleDbType.Binary));
cmd.Parameters["@image"].Value = btyPic;
cmd.ExcuteNoQuery();报错"Data type mismatch in criteria expression"
为什么阿

解决方案 »

  1.   

    btyPic什么类型?类型正确应该可以可以使用的例子 
    http://dotnet.aspx.cc/article/9154bc99-df64-4e2d-b096-26c99ce464be/read.aspx
    http://dotnet.aspx.cc/article/17612afb-3fc0-4fb9-bfa9-00cba28336e9/read.aspx
      

  2.   

    http://community.csdn.net/Expert/topic/4292/4292611.xml?temp=.801037
      

  3.   

    using   System;   
      using   System.Collections;   
      using   System.ComponentModel;   
      using   System.Data;   
      using   System.Data.OleDb;   
      using   System.Drawing;   
      using   System.Web;   
      using   System.IO;   
      using   System.Web.SessionState;   
      using   System.Web.UI;   
      using   System.Web.UI.WebControls;   
      using   System.Web.UI.HtmlControls;   
        
      namespace   eMeng.Exam   
      {   
      ///   <summary>   
      ///   Image2Access   的摘要说明。   
      ///   </summary>   
      public   class   Image2Access   :   System.Web.UI.Page   
      {   
      protected   System.Web.UI.HtmlControls.HtmlInputText   MyFileName;   
      protected   System.Web.UI.HtmlControls.HtmlInputFile   MyFile;   
      protected   System.Web.UI.HtmlControls.HtmlInputButton   Submit1;   
      protected   System.Web.UI.WebControls.DataGrid   DG_Persons;   
        
      private   void   Page_Load(object   sender,   System.EventArgs   e)   
      {   
      //   在此处放置用户代码以初始化页面   
      BindGrid();   
      }   
      private   void   BindGrid()   
      {   
      string   strCnn     =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="   +Server.MapPath("Image2Access.mdb");   
      OleDbConnection   myConnection   =   new   OleDbConnection(strCnn);   
      OleDbCommand   myCommand   =   new   OleDbCommand("SELECT   *   FROM   Person",   myConnection);   
      myCommand.CommandType   =   CommandType.Text;   
      try   
      {   
      myConnection.Open();   
      DG_Persons.DataSource   =   myCommand.ExecuteReader(CommandBehavior.CloseConnection);   
      DG_Persons.DataBind();   
      }   
      catch(OleDbException   SQLexc)   
      {   
      Response.Write("提取数据时出现错误:"   +   SQLexc.ToString());   
      }   
      }   
      protected   string   FormatURL(object   strArgument)   
      {   
      return   "ReadImage.aspx?id="   +   strArgument.ToString();   
      }   
        
      #region   Web   窗体设计器生成的代码   
      override   protected   void   OnInit(EventArgs   e)   
      {   
      //   
      //   CODEGEN:   该调用是   ASP.NET   Web   窗体设计器所必需的。   
      //   
      InitializeComponent();   
      base.OnInit(e);   
      }   
        
      ///   <summary>   
      ///   设计器支持所需的方法   -   不要使用代码编辑器修改   
      ///   此方法的内容。   
      ///   </summary>   
      private   void   InitializeComponent()   
      {           
      this.Submit1.ServerClick   +=   new   System.EventHandler(this.Submit1_ServerClick);   
      this.Load   +=   new   System.EventHandler(this.Page_Load);   
        
      }   
      #endregion   
        
      private   void   Submit1_ServerClick(object   sender,   System.EventArgs   e)   
      {   
      //得到提交的文件   
      Stream   fileDataStream   =   MyFile.PostedFile.InputStream;   
        
      //得到文件大小   
      int   fileLength   =   MyFile.PostedFile.ContentLength;   
        
      //创建数组   
      byte[]   fileData   =   new   byte[fileLength];   
        
      //把文件流填充到数组   
      fileDataStream.Read(fileData,0,fileLength);   
        
      //得到文件名字   
      string   fileTitle   =   MyFileName.Value;   
        
      //得到文件类型   
      string   fileType   =   MyFile.PostedFile.ContentType;   
        
      //构建数据库连接,SQL语句,创建参数   
      string   strCnn     =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="   +   Server.MapPath("Image2Access.mdb");   
      OleDbConnection   myConnection   =   new   OleDbConnection(strCnn);   
      OleDbCommand   command   =   new   OleDbCommand   ("INSERT   INTO   Person   (PersonName,PersonEmail,PersonSex,PersonImageType,PersonImage)"   +     
      "VALUES   (@PersonName,@PersonEmail,@PersonSex,@PersonImageType,@PersonImage)",   myConnection);   
        
      System.Data.OleDb.OleDbParameter   paramPersonName   =   new   OleDbParameter("@PersonName",   System.Data.OleDb.OleDbType.VarChar,50);     
      paramPersonName.Value   =   fileTitle;   
      command.Parameters.Add(paramPersonName);   
        
      System.Data.OleDb.OleDbParameter   paramPersonEmail   =   new   OleDbParameter("@PersonEmail",   System.Data.OleDb.OleDbType.VarChar,50);   
      paramPersonEmail.Value   =   "[email protected]";   
      command.Parameters.Add(paramPersonEmail);   
        
      System.Data.OleDb.OleDbParameter   paramPersonSex   =   new   OleDbParameter("@paramPersonSex",   System.Data.OleDb.OleDbType.VarChar,50);     
      paramPersonSex.Value   =   "男";   
      command.Parameters.Add(paramPersonSex);   
        
      System.Data.OleDb.OleDbParameter   paramPersonImageType   =   new   OleDbParameter("@PersonImageType",   System.Data.OleDb.OleDbType.VarChar,50);   
      paramPersonImageType.Value   =   fileType;   
      command.Parameters.Add(paramPersonImageType);   
        
      System.Data.OleDb.OleDbParameter   paramPersonImage   =   new   OleDbParameter("@PersonImage",   System.Data.OleDb.OleDbType.Binary);     
      paramPersonImage.Value   =   fileData;   
      command.Parameters.Add(paramPersonImage);   
        
      //打开连接,执行查询   
      myConnection.Open();   
      command.ExecuteNonQuery();   
      myConnection.Close();   
        
        
      }   
      }   
      }
      

  4.   

    to net_lover(【孟子E章】)           btyPic是byte[]类型,不知道为什么就是报这个错。to lu_xinjin() 
             我知道这样传图片到数据库,我也这么做了,可是就是这个错误,郁闷死了。
      

  5.   

    我觉得自己没有错的,之前用sql server2005没有这个错的,现在用access2003就出现了,苦恼啊
      

  6.   

    为了方便好心人帮我,我把代码贴出来
    try
    {
      //打开一个文件对话框,选中一个图片
      OpenFileDialog of = new OpenFileDialog();
      if (of.ShowDialog() == DialogResult.OK && of.FileName != "")
      {
        sql语句
        string insert = "insert into Menu (EName,Photo) values(@Ename,image)";                
        OleDbCommand cmd = new OleDbCommand(insert,con);
        //创建流
        FileStream fs;
        fs = new FileStream(of.FileName, FileMode.Open, FileAccess.Read);
        //创建byte数组
        byte[] btyPic = new byte[(int)fs.Length];
        //把文件存到数据里
        fs.Read(btyPic, 0, btyPic.Length);
        fs.Close(); 
        //添加sql参数
        cmd.Parameters.Add(new OleDbParameter("@image", OleDbType.Binary));
        cmd.Parameters["@image"].Value = btyPic;                    
        
        cmd.Parameters.Add(new OleDbParameter("@Ename", OleDbType.VarChar, 50, "EName"));
        cmd.Parameters["@Ename"].Value = “test”;    //执行sql
        cmd.ExecuteNonQuery();
        MessageBox.Show("Add Succeeded");
      }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }           access里面是EName,Text   Image,Ole Object两个字段