2017-02-14 129 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

为什么在插入语句中使用where子句? – NicoRiff

回答

2

看起来你正在尝试做什么,你需要的是一个UPDATE语句,而不是你正在编写的INSERT。这似乎是一个更appropiate查询:

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

请注意,我用的参数,而不是你的文本框的值。这是因为您容易受到SQL注入最常见的数据库安全漏洞之一的攻击。

使用该文本为您查询,然后你可以添加你的价值观来查询是这样的:

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

Assumming cmd是你的SqlCommand

+2

在像这样的即席查询中要小心使用AddWithValue。它有时可能会导致数据类型错误并导致问题。最好明确定义数据类型。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/还有我的+1! –

+0

@SeanLange你是对的。我只是使用了AddWithValue,因为我不知道OP表数据类型。好的观察。 – NicoRiff

相关问题