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

时间:2012-06-04 22:14:01

标签: c# sql ssis

真的是一个简单的问题,我有两个变量“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 + "/"; 

由于

3 个答案:

答案 0 :(得分:7)

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注入的东西

答案 1 :(得分:0)

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();
}

答案 2 :(得分:-2)

string commandString = "SELECT * FROM myTable WHERE time BETWEEN '" + one_hour_ago + "' AND '" + current_time + "'";

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

编辑2:对于所有那些低估我的无知,“one_hour_ago”和“current_time”显然不是用户输入的字符串(但是他自己的DateTime vars),并且可以在任何情况下使用它们之前只需要一个简单的TryParse就完全万无一失(而且所有那个sql参数在这方面也做了,没有额外的魔力)。现在,字符串连接sql cmd 错误,但我没有建议,我只是纠正了他自己的方法。并且我可以警告他关于sql注入,但看到他如何处理一个简单的字符串操作问题,我只是认为它是他的问题的最少(对现在),并假设它只会让他进一步混淆到最后。