Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在sql语句中使用字符串变量_C#_Sql Server 2008 - Fatal编程技术网

C# 如何在sql语句中使用字符串变量

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

我有一个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", 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