如何在sql语句中使用字符串变量
我有一个WPF应用程序,我得到了
string someone = TextBox.text;
我想在以下查询中使用它
query = " Select * From Table Where Title = someone "
我该如何在查询中使用变量?
你可以这样做
query = "Select * From Table Where Title = " + someone;
但这很糟糕,并打开SQL注入
您应该只使用参数化查询
这样的事情应该让你开始
using (var cn = new SqlClient.SqlConnection(yourConnectionString)) using (var cmd = new SqlClient.SqlCommand()) { cn.Open(); cmd.Connection = cn; cmd.CommandType = CommandType.Text; cmd.CommandText = "Select * From Table Where Title = @Title"; cmd.Parameters.Add("@Title", someone); }
来自Jon Skeet的回答,因为他比我的更完整
有关更多信息,请参阅SqlCommand.Parameters的文档。
基本上,您不应出于各种原因将您的值嵌入SQL本身:
- 混合代码和数据是不优雅的
- 除非你非常小心逃避,否则它会打开SQL注入攻击
- 你必须担心数字,日期和时间等格式和i18n细节
- 当查询保持相同且仅更改值时,优化器的工作量较少 – 它可以直接查找以前的优化查询,因为它在SQL方面是完美匹配。
您应该使用参数化SQL查询:
query = "SELECT * From TableName WHERE Title = @Title"; command.Parameters.Add("@Title", SqlDbType.VarChar).Value = someone;
有关更多信息,请参阅SqlCommand.Parameters的文档。
基本上,您不应出于各种原因将您的值嵌入SQL本身:
- 混合代码和数据是不优雅的
- 除非你非常小心逃避,否则它会打开SQL注入攻击
- 你必须担心数字,日期和时间等格式和i18n细节
- 当查询保持相同且仅更改值时,优化器的工作量较少 – 它可以直接查找以前的优化查询,因为它在SQL方面是完美匹配。
最简单的是使用C#Prepared sql。 这篇文章的例子 。 您不必担心转义sql字符串中的字符或其他任何内容
declare @SqlQuery varchar(2000), @Fromdate varchar(20), @Todate varchar(20) set @Fromdate='01 jan 2017' set @Todate='30 mar 2017' set @SqlQuery='select * from tblEmployee where tblEmployee.JDate between '''+ @Fromdate + ''' and '''+ @Todate+ '''' print @SqlQuery
- CurrentThread / ProcessThread对象
- ASP.NET在模板字段中的Gridview单元格中更改文本和颜色
- 没有为类型’System.Int32’和’System.Double’定义二元运算符Multiply。
- 将C#字符串转换为JavaScript字符串
- 我可以在RESTful服务中使用TCP吗?
- IIS 7.x,添加启用HTTPS的站点:SiteCollection.Add(string,string,string,byte )重载
- FileStream和C#中的FileSystemWatcher,奇怪的问题“进程无法访问文件”
- 使用ProtoBuf-Net反序列化嵌套动态类型的问题
- 如何创建和使用符号服务器?