数据库用的是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"
为什么阿
代码执行插入时报错
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"
为什么阿
http://dotnet.aspx.cc/article/9154bc99-df64-4e2d-b096-26c99ce464be/read.aspx
http://dotnet.aspx.cc/article/17612afb-3fc0-4fb9-bfa9-00cba28336e9/read.aspx
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();
}
}
}
我知道这样传图片到数据库,我也这么做了,可是就是这个错误,郁闷死了。
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两个字段