我在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数据类型。 有什么问题?
答案 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用于全面的数据类型?