我正在开发我的第一个可用的练习应用程序,以帮助我工作的人运行简单的查询而无需了解SQL。
我有一个简单的表单,有4个文本框条目。列,表,条件列,条件
我想要的是如果条件列为空,则运行不带where语句的查询,或者如果有条件语句则运行条件语句。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles CMDQuery.Click
If Columntxtbox.Text <> "" Then
If SQL.HasConection = True Then
If Conditioncolumntxtbox.Text = "" Then
SQL.runquery("Select " & Columntxtbox.Text & " from " & tabletxtbox.Text)
Else
SQL.runquery("Select " & Columntxtbox.Text & " from " & tabletxtbox.Text & " Where " & Conditioncolumntxtbox.Text & " like'%" & conditiontxtbox.Text & "%'")
If SQL.sqldataset.Tables.Count > 0 Then
DGVData.DataSource = SQL.sqldataset.Tables(0)
End If
End If
End If
End If
End Sub
发生的事情是当我填写所有字段时,它工作正常,当我尝试只输入列和表字段时,没有任何反应。我认为它与第三个If有关(如果我将=更改为&lt;&gt;那么我会得到关键字的错误,例如当列和城市被填满时什么都没有填充) 任何帮助将不胜感激
感谢
答案 0 :(得分:1)
缺少空格中的一部分,当没有条件时,您不会显示查询结果
If Columntxtbox.Text <> "" Then
If SQL.HasConection = True Then
If Conditioncolumntxtbox.Text = "" Then
SQL.runquery("Select " & Columntxtbox.Text & " from [" & tabletxtbox.Text & "]")
Else
SQL.runquery("Select " & Columntxtbox.Text & " from [" & tabletxtbox.Text & _
"] Where [" & Conditioncolumntxtbox.Text & "] like '%" & _
conditiontxtbox.Text & "%'")
End If
If SQL.sqldataset.Tables.Count > 0 Then
DGVData.DataSource = SQL.sqldataset.Tables(0)
End If
End If
End If
但请记住,让用户直接键入值,列名和将在没有检查的情况下添加到sql文本的文本的其他部分是非常糟糕的做法。用户可以键入任何内容,您可以找到了解 sql injection 的恶意用户并破坏您的生活。
考虑到背景和要求,(一个练习应用程序)我认为你暂时可以忽略这个问题。但同样,在真实的情境中,数据是客户最重要的事情,留下这么大的漏洞真的是不专业的。