【发布时间】:2018-09-24 19:20:27
【问题描述】:
我在堆栈溢出时非常享受我在这里的逗留,我发现了比我数不清的更多有用信息。
但是,通过我所有的搜索,我还没有找到我的问题的答案。
我有一个将数据输入 SQL 数据库的 Winforms 应用程序。我在将此表单中的文本框发布到数据库时遇到问题。
如果用户输入撇号或引号,则 Visual Studio 中的查询将停止在该撇号在文本框中的位置,即使之后有更多数据并且不会将数据输入数据库。
我知道添加第二个撇号会取消输入的撇号,但是,在执行查询以取消它们之前,我似乎无法读取文本框中的数据。我已经举了一个例子来说明这个文本框中什么是有效的,什么打破了这个问题中的查询,以便进一步澄清。
对不起,各位,我好像忘记把我的代码放到这个帖子里了。
Dim InsertQuery As String = "INSERT INTO SelfInstallNotes (Troubleshooting, DateAndTime, [CL to OD], [Swapped Dscntd Clocks], [Upgrading to SaaS], [Update Version], [Created RPF], [Created RMA], [Clock Serial], [Case Number], [User], [Grabbed], [Account Manager], [Transferred to AM]) VALUES('" & Hidden.TextBox6.Text.ToString & "'" & "," & "'" & DateTimePicker1.Value & "'" & "," & "'" & CheckBox1.CheckState & "'" & "," & "'" & CheckBox2.CheckState & "'" & "," & "'" & CheckBox3.CheckState & "'" & "," & "'" & CheckBox4.CheckState & "'" & "," & "'" & CheckBox5.CheckState & "'" & "," & "'" & CheckBox6.CheckState & "'" & "," & "'" & TextBox2.Text & "'" & "," & "'" & TextBox1.Text & "'" & "," & "'" & TextBox6.Text & "'" & "," & "'" & Hidden.TextBox3.Text & "'" & "," & "'" & Hidden.TextBox4.Text & "'" & "," & "'" & Hidden.TextBox5.Text & "'" & ")"
但是在阅读了你们所有人的答案之后,这段代码肯定是错误的,并且可能会在以后引起问题。我将尝试下面发布的答案并相应地更新线程。
由于 can't 中的撇号,此查询不会发布到 DB
虽然文本框中的此输入将毫无问题地发布,因为没有撇号或引号。
【问题讨论】:
-
您需要阅读 SQL 参数和 SQL 注入。从用户输入字段直接插入数据库是一个坏主意。
-
如何构建查询?永远不要仅仅通过将参数连接为字符串来做到这一点——这会让你面临 SQL 注入攻击。
-
你的屏幕截图没那么有用。显示您的代码。