この問題を解決するにはどうすればよいですか?


System.Data.OleDb.OleDbException: ‘構文エラー (演算子がありません) クエリ式 ‘=1-‘.’/
以下のコードでエラーメッセージが表示されました。

VB.NET
Imports System.Data.OleDb
Public Class Form2
    Private Sub Bts_Click(sender As Object, e As EventArgs) Handles Bts.Click
        Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\monja\Documents\Database7.accdb")
        conn.Open()

        Dim cmd As New OleDbCommand(" select RoomName, Location, Information from table1 where=" + TBs.Text + "", conn)
        Dim myreader As OleDbDataReader = cmd.ExecuteReader

        myreader.Read()

        TBr1.Text = myreader("Location")
        TBr2.Text = myreader("Information")
    End Sub
End Class

私が試したこと:

MS アクセス データベースを確認しました。 そして、私はググった。

次のようなクエリを試してください。

SELECT RoomName, Location, Information from table1 where Location=1

パラメータ化されたクエリを使用しないと、コードが SQL インジェクション攻撃に対して脆弱になります。
見る: VB.NET データベース アプリケーションでパラメータ化されたクエリとレポートを使用する | コードグル[^]

これはあなたが思っていたよりも大きな問題です…

文字列を連結して SQL コマンドを作成しないでください。 データベース全体を破壊する可能性のある、偶発的または意図的な SQL インジェクション攻撃にさらされる可能性があります。 代わりに、常にパラメーター化されたクエリを使用してください。

文字列を連結すると、SQL が次のようなコマンドを受け取るため、問題が発生します。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

ユーザーが追加した引用符は、SQL に関する限り文字列を終了させ、問題が発生します。 しかし、それはもっと悪いかもしれません。 代わりに「x’;DROP TABLE MyTable;–」と入力すると、SQL は非常に異なるコマンドを受け取ります。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'

どの SQL が 3 つの別個のコマンドとして認識されるか:

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';

完全に有効な SELECT

SQL
DROP TABLE MyTable;

完全に有効な「テーブルの削除」コマンド

SQL
--'

そして、それ以外はすべてコメントです。
一致する行を選択し、DB からテーブルを削除し、それ以外は無視します。

したがって、常にパラメーター化されたクエリを使用してください。 または、DB をバックアップから頻繁に復元する準備をしてください。 バックアップは定期的に取っていますよね?



Source link

コメント

タイトルとURLをコピーしました