2017-02-14 19 views
-6
SqlQuery = "INSERT INTO GradeTable(Grade,UserID,RegDate)Values('" & TxtGrade.Text.Trim & "','" & UserID & "','" & DTBReg.Value & "'Where GradeTable.StudentID ='" & StudentID & "' and GradeTable.CourseID= '" & CourseID & "') " 
+4

ですボビー・テーブルが訪問する前に照会しています。 http://bobby-tables.com/これはSQLインジェクションの脆弱性の教科書の例です。 –

+3

これは問題ではありませんが、これはコードです。 – HoneyBadger

+7

なぜinsert文にwhere句を使用していますか? – NicoRiff

答えて

2

あなたが何をしようとしているかのように、あなたが書いているようにUPDATE文でINSERTではないようです。これは、はるかにappropiateクエリようだ:私はあなたのテキストボックスの値をパラメータを使用していない

UPDATE GradeTable 
SET Grade = @grade, 
    UserID = @UserID, 
    RegDate = @RegDate 
WHERE StudentID = @StudentID AND CourseID = @CourseID 

注意。これは、SQLインジェクションで最も一般的なデータベースセキュリティの欠陥の1つに脆弱であるためです。

は、クエリのためにそのテキストを使用して、クエリにこの方法をあなたの値を追加することができます。cmdをAssumming

cmd.Parameters.AddWithValue("@grade", TxtGrade.Text.Trim); 
cmd.Parameters.AddWithValue("@UserID", UserID); 
//AND SO ON WITH OTHER PARAMETERS 

はあなたが、読ん理解し、パラメータ化された使用を開始する必要があり、あなたのSqlCommand

+2

このような特別なクエリではAddWithValueを使用するように注意してください。データ型が間違っていたり、問題が発生することがあります。明示的にデータ型を定義するのがベストです。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/まだ私からの+1! –

+0

@SeanLangeあなたはそれについて正しいです。私はOPテーブルのデータ型を知らないので、AddWithValueを使用しました。良い観察。 – NicoRiff

関連する問題