C# 如何在sql语句中使用字符串变量
我有一个WPF应用程序,在其中我得到C# 如何在sql语句中使用字符串变量,c#,sql-server-2008,C#,Sql Server 2008,我有一个WPF应用程序,在其中我得到 string someone = TextBox.text; 我想在下面的查询中使用它 query = " Select * From Table Where Title = someone " 我应该如何在查询中使用变量someone?您应该使用参数化SQL查询: query = "SELECT * From TableName WHERE Title = @Title"; command.Parameters.Add("@Title", SqlDb
string someone = TextBox.text;
我想在下面的查询中使用它
query = " Select * From Table Where Title = someone "
我应该如何在查询中使用变量someone?您应该使用参数化SQL查询:
query = "SELECT * From TableName WHERE Title = @Title";
command.Parameters.Add("@Title", SqlDbType.VarChar).Value = someone;
有关更多信息,请参阅文档
基本上,由于各种原因,您不应该将值嵌入SQL本身:
混合使用代码和数据是不雅观的
它会使您面临SQL注入攻击,除非您非常小心地逃逸
您必须担心数字、日期和时间等的格式和i18n细节
当查询保持不变,只有值发生变化时,优化器所做的工作就更少了——它可以直接查找以前优化过的查询,因为它将是SQL方面的完美匹配。
最简单的方法是使用C编写的sql。您不必担心转义sql字符串中的字符或其他任何内容,您可以这样做
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的回答来看,他的答案比我的更完整
有关更多信息,请参阅文档
基本上,由于各种原因,您不应该将值嵌入SQL本身:
混合使用代码和数据是不雅观的
它为SQL注入打开了大门
攻击,除非你非常小心逃跑
您必须担心数字、日期和数据的格式和i18n细节
时代等
当查询仅与值保持相同时
更改后,优化器要做的工作更少-它可以查找
上一个优化的查询,因为它将在
SQL的术语。
你不应该!听说过SQL注入或参数化查询吗?是的,这是非常糟糕的做法。这个问题太广泛了,它涉及到如何根据WPF应用程序中的用户输入从SQL server获取数据。有整本书都在介绍这一点。在这里,你可以阅读一些SQL注入的例子,我现在觉得很愚蠢:D BenI把你的答案的内容拉到了我的答案上,因为我的答案被接受了,所以至少有人看了被接受的答案会看到最完整的信息。如果我有多个变量我必须添加呢?使用多个参数。看起来像是cmd.CommandText=Select*,表中的Tile=@Title,Thing=@Thing cmd.Parameters。Add@Title某人cmd.Parameters。Add@Thing事情
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