谁教你了这个语法真的教会你一个错误的东西。
如您所猜,此语法将字符串txtSlipID_srch
的内容连接到您的SQL文本,从而形成固定文本和可变部分的完整指令。整个事情然后传递给数据库引擎执行。
但允许用户输入文本框的东西,然后使用该输入来建立SQL查询确实是一个错误的事情
,用户可以输入任何东西,任何东西也可能是一个很好伪造的字符串改变您的意图并破坏您的数据库或获取您不希望他看到的信息(密码或信用卡号码)。它被称为Sql Injection,并且有数以千计的关于如何实现这种黑客技术的文章。我不想重复任何事情,你可以简单地看看这个well known comics+question+answers并阅读下面的解释
除此之外。存在正确解析字符串的问题。在您的字符串变量中出现单引号可能会导致您的查询无效,因为单引号用于分隔传递给数据库的字符串值。使用转换过程的小数和日期应该在字符串中进行转换。同样在这里,您应该为数据库创建正确的文本(它是否像逗号或小数点?,日期格式为'dd/MM/yyyy'或'MM/dd/yyyy'或什么?等等)
唯一有效的方法是使用你写你的命令文本以这种方式参数化查询
selectSQL = "SELECT * FROM slip WHERE [email protected]";
现在没有更多的两个字符串和字符串值的两边没有单引号'的串联转义“他们,但只是一个名为@id
的参数占位符。
ADO.NET库将提供相应的类来处理该参数,并将该值传递给数据库引擎,以便在该数据库引擎中进行正确处理。
SqlCommand cmd = new SqlCommand(selectSQL, connection);
cmd.Parameters.Add("@id", SqlDbType.NVarChar).Value = txtSlipID_srch;
SqlDataReader reader = cmd.ExecuteReader();
......
你应该归还这本书并要求你的大学退款。这是从C#执行SQL代码的一种可怕方式,因为它会将您的应用程序打开到SQL注入,这是一个巨大的安全风险。 –
大学的名字是什么,我想把它列入我的黑名单。 :) –
不要听书 - **使用参数化查询**! –