1

shortNotesという名前のAccess07テーブルにfileName、rowNo、rowTextという3つのフィールドがあります。この挿入クエリを実行すると、完全に機能します。

thisCommand.CommandText = "insert into shortNotes values('" + 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 

ここで、ファイルはメモ、rnoは番号、行テキストはアクセス07のメモデータ型です。問題は何ですか。

4

3 に答える 3

2

問題は、OleDbが名前付きパラメーターを使用しないことです。

「OLEDB.NETFrameworkデータプロバイダーは、名前付きパラメーターの代わりに疑問符(?)でマークされた位置パラメーターを使用します。」

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

そこで例を確認してください。

于 2012-08-20T16:45:59.503 に答える
0

推測では、それはあなたの列の長さと関係があるのでしょうか?タイプを文字列(ウェルメモ)として指定しましたが、長さは指定していません-長さのオプションのパラメーターを受け取るオーバーロード( MSDN docs )を使用してみてください。たとえば、アクセスノートフィールドの長さが255文字の場合:

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

私の心配はこれがないことです。パラメータの長さが1文字しかないため、値をこれより長い値に設定しようとすると転倒する可能性があります。

于 2012-08-19T08:50:01.853 に答える
0

Accessデータベースのこれらの列はどのデータ型ですか?BSTRの代わりにVarCharを使用したり、データ型全体にVariantを使用したりしましたか?

于 2012-08-20T16:23:17.723 に答える