在VB.NET中进行大量的输入验证

时间:2010-01-12 09:05:53

标签: vb.net validation

我有一个表单,用户可以在我的大学预订房间。我想验证用户输入以避免SQL注入(我的程序使用MS Access数据库)并且还在其名称中停止数字和synbols等。

我可以很好地进行验证,但是只有在所有验证测试都恢复为真的情况下才会进行大量验证,然后执行方法。我确实有这样的事情:

If txtName.Text = "" Then
    frmBookErr.SetError(txtName, "Name field cannot be left blank.")
    fail = 1
Else
    frmBookErr.SetError(txtName, "")
    fail = 0
End If

然后检查fail变量,但如果其中一个验证测试恢复为真,那么它稍后会在表单中被覆盖。

任何人都可以提供一些输入吗?感谢。

3 个答案:

答案 0 :(得分:1)

如果要避免SQL注入,请使用参数化SQL查询或存储过程,不要通过连接构造SQL。

答案 1 :(得分:1)

将过程开始时的失败变量设置为0,然后仅在出现故障时将其设置为1 ...

    fail = 0
    If txtName.Text = "" Then
        frmBookErr.SetError(txtName, "Name field cannot be left blank.")
        fail = 1
    End If
    If txtSomethingElse.Text = String.Empty Then fail = 1
    If fail = 0 Then frmBookErr.Clear()

答案 2 :(得分:0)

为避免SQL注入,您需要使用不直接允许更改SQL查询的内容。

现在这并不意味着您无法提供值,这意味着您强烈指定要处理到服务器的类型。

Example from CodeProject

string commandText = "SELECT * FROM Customers "+
    "WHERE Country=@CountryName";
SqlCommand cmd = new SqlCommand(commandText, conn);
cmd.Parameters.Add("@CountryName",countryName);

不是将countrName作为concated string提供,而是实际告诉您的Sql Command您将其作为参数提供,它不允许查询本身的任何更改。