字符串的Criteria Expression中的MS Access 2007数据类型不匹配

时间:2012-08-19 07:17:10

标签: c# winforms oledb

我在Access 07表中有三个名为shortName的字段名为fileName,rowNo和rowText。 当我运行这个插入查询时,它完美无缺:

thisCommand.CommandText =“插入shortNotes值('”+ fName +“',”+ rNo +“,'”+ richTextBox2.Text +“|”+ rNo +“')”;

但是当我添加参数时,它开始抛出这个错误: “标准表达式中的数据类型不匹配”

以下是代码:

        dbCon = new OleDbConnection(MyconnectionString);
        dbCon.Open();
        thisCommand = new OleDbCommand();
        thisCommand.Connection = dbCon;

        thisCommand.Parameters.Add("@rowtext", OleDbType.BSTR);
        thisCommand.Parameters.Add("@file", OleDbType.BSTR);
        thisCommand.Parameters.Add("@rno", OleDbType.Integer);

        thisCommand.Parameters["@rowtext"].Value = richTextBox2.Text + " |" + rNo;

        thisCommand.Parameters["@file"].Value = fName;

        thisCommand.Parameters["@rno"].Value = rNo;

        thisCommand.CommandText = "insert into shortNotes values(@file,@rno,@rowtext)";
        thisCommand.ExecuteNonQuery();//Error 

这里的文件是memo,rno是number,rowtext是access 07中的memo数据类型。 有什么问题?

3 个答案:

答案 0 :(得分:2)

问题是OleDb不使用命名参数。

“OLE DB.NET Framework数据提供程序使用标有问号(?)而不是命名参数的位置参数。”

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx

检查那里的例子..

答案 1 :(得分:0)

猜测,这可能与您的色谱柱长度有关吗?您已将类型指定为字符串(井备忘录)但不指定长度 - 尝试使用带有可选参数长度的重载(MSDN docs)。例如,如果您的访问备注字段长度为255个字符:

thisCommand.Parameters.Add("@rowtext", OleDbType.BSTR, 255);
thisCommand.Parameters.Add("@file", OleDbType.BSTR, 255);

我的担心是没有这个,它可能会假设你的参数长度只有1个字符长,所以当你尝试将值设置为比这更长的时间时,它会被忽略。

答案 2 :(得分:0)

Access数据库中这些列的数据类型是什么?您是否尝试过使用VarChar而不是BSTR,甚至只是将Variant用于全面的数据类型?