【解決方法】更新ステートメント SQL を宣言する適切な形式


Com2.CommandText = "update dbo.UserRecords set Last Login=" & dtpLastLog2.Value.ToString & "where " & txtEmailName.Text & "=Email"

問題は、プログラムが例外をスローしていることです

System.Data.SqlClient.SqlException: 'Incorrect syntax near 'Login'.'

私が試したこと:

再度ログインして (dtpLastLog2 の値) 時刻と日付を変更し、データベース (dbo.UserRecord) に時刻と日付を表示しようとしています。 データベースに保存された電子メールとテキストボックス名 txtEmailName に入力した電子メールを比較しようとしているステートメントが同じ値の場合。 そうであれば、変更が発生します。

解決策 1

その単語の前の部分を見てください。 set Last Login. そこにある「最後」とは何ですか? 列の実際の名前は 2 語ですか、それともリンク文字がありませんか? それが列の実際の名前である場合は、角括弧で囲む必要があります。 set [Last Login].

しかし、入力値の有効性をチェックせずに文字列連結を使用してステートメントを作成しているという点で、上記のコードにはさらに深刻な問題があります。 そのため、データベースは SQL インジェクション攻撃に対して脆弱であり、システムを危険にさらしたり、完全に破壊したりする可能性があります。 どのような場合でも、データベース アクセスにはパラメーター化されたクエリを使用する必要があります。 見る bobby-tables.com: SQL インジェクションを防止するためのガイド[^].

コメント

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