如何在 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 + "/";
谢谢
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_before
和currentTime
是传递给方法的参数。
这应该照顾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注入,但是看到他在简单的字符串操作中遇到了问题,我只是判断这是他(现在)最少的问题,并认为这只会让他进一步困惑。