1

我在名为 shortNotes 的 Access 07 表中有三个名为 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 

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

4

3 回答 3

2

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

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

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

检查那里的例子..

于 2012-08-20T16:45:59.503 回答
0

猜测一下,这可能与您的列长度有关吗?您已将类型指定为字符串(以及备忘录)而不是长度 - 尝试使用采用可选参数作为长度的重载(MSDN 文档)。例如,如果您的 Access 备注字段长度为 255 个字符:

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

我担心的是没有这个,它可能会假设您的参数长度只有 1 个字符长,因此当您尝试将值设置为比这更长的值时会跌倒。

于 2012-08-19T08:50:01.853 回答
0

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

于 2012-08-20T16:23:17.723 回答