0

SQLクエリを使用してテーブル内の最後のIDを取得し、結果をTextBox値(文字列)とともに追加しようとしています:

Dim searchforID = New OleDbCommand("select ID from [table1] where ID = (select max(id) from [table1])", con)
Dim variable1 = searchforID + TextBox1.Text

しかし、それはこのエラーをスローします:

コンパイラ エラー メッセージ: BC30452: 型 'System.Data.OleDb.OleDbCommand' および 'String' に対して演算子 '+' が定義されていません。


それを修正しようとしています

-- それで、返されたレコード ID を次のように変換しようとしました。

Dim variable1 = Convert.ToString(searchforID) + TextBox1.Text

現在はエラーは発生していませんが、残念ながら、次の例のように、"System.Data.OleDb.OleDb" + テキスト ボックスの値が返されます:
System.Data.OleDb.OleDbtest

-- 私も、返されたレコード ID を整数に変換するとエラーがスローされると考えました。

例外の詳細: System.InvalidCastException: タイプ 'System.Data.OleDb.OleDbCommand' のオブジェクトをタイプ 'System.IConvertible' にキャストできません。

では、最後のレコード ID の取得が失敗するのはなぜでしょうか? SQL クエリが間違っている可能性はありますか?

ありがとうございました。


誰かが役に立つと思うなら、問題の簡単な解決策:

Dim searchforID = New OleDbCommand("select MAX(ID) from [table1]", con)
Dim variable1 = searchforID.ExecuteScalar() & TextBox1.Text

また、以下の回答とコメントには有用な情報があります。

4

2 に答える 2

3
Dim variable1 = searchforID.ExecuteScalar() & TextBox1.Text

searchforID は値ではなく ICommand です。結果を取得する場合は、コマンドを実行して結果を取得する必要があります。ExecuteScalar は、クエリから最初の行の最初のセル値を返します

于 2013-03-06T10:30:23.437 に答える