如何在 C# 中的 SQL 命令中传递两个变量

本文关键字:变量 两个 中的 命令 SQL | 更新日期: 2023-09-27 18:36:19

真的一个简单的问题,我有两个变量"one_hour_ago"和"current_time",我需要在我的sql命令中传递这两个变量,如下所示:

string commandString = "SELECT * from myTable where time between one_hour_ago and current_time";

这是我所拥有的,但我得到语法错误

string commandString = "SELECT * from myTable where TS between ' and /" + one_hour_ago + "'" + current_time + "/"; 

谢谢

如何在 C# 中的 SQL 命令中传递两个变量

string sqlString = "SELECT * FROM myTable WHERE time BETWEEN  @before AND @current_time"; 
SqlCommand oCmd = new SqlCommand(sqlString , connString);
oCmd.Parameters.AddWithValue("@before", date_before);
oCmd.Parameters.AddWithValue("@current_time", currentTime);

其中date_beforecurrentTime是传递给方法的参数。

这应该照顾SQL注入的东西

create procedure Proc_name (@param1 varchar(100), 
@param2 varchar(100), 
@param3 varchar(100), 
@param4 varchar(100)) 
as 
insert into table1 values(@param1, @param2, @param3, @param4)

然后从您的代码(使用 ADO.NET 给出 c# 示例)

using (SqlConnection connection = new SqlConnection(connectionString))
{
// Create the command and set its properties.
SqlCommand command = new SqlCommand();
SqlCommand command = new SqlCommand 
   ("Proc_name", connection); 
command.CommandType = CommandType.StoredProcedure;
// Add the input parameters and set the properties.
SqlParameter parameter1 = new SqlParameter();
parameter.ParameterName = "@Param1";
parameter.SqlDbType = SqlDbType.NVarChar;
parameter.Direction = ParameterDirection.Input;
parameter.Value = param1;
SqlParameter parameter2 = new SqlParameter();
parameter.ParameterName = "@Param2";
parameter.SqlDbType = SqlDbType.NVarChar;
parameter.Direction = ParameterDirection.Input;
parameter.Value = param2;


// Add the parameter to the Parameters collection. 
command.Parameters.Add(parameter1);
command.Parameters.Add(parameter2);

// Open the connection and execute the reader.
connection.Open();
SqlDataReader reader = command.ExecuteNonQuery();
reader.Close();
}
string commandString = "SELECT * FROM myTable WHERE time BETWEEN '" + one_hour_ago + "' AND '" + current_time + "'";

编辑:这正是OP明确要求的,为了更好的(正确)答案,看看Jane Doe的...

编辑2:对于所有那些对我投反对票的无知,"one_hour_ago"和"current_time"显然不是用户输入的字符串(而是他自己的DateTime变量),并且在任何情况下都可以在使用它们之前只需一个简单的TryParse就可以完全万无一失(这就是sql参数在这方面所做的一切, 它没有额外的魔法)。现在,字符串连接sql cmd错误的,但我没有建议这样做,我只是纠正了他自己的方法。我本可以警告他SQL注入,但是看到他在简单的字符串操作中遇到了问题,我只是判断这是他(现在)最少的问题,并认为这只会让他进一步困惑。