真的是一个简单的问题,我有两个变量“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 + "/";
由于
答案 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_before
和currentTime
是您传递给方法的参数。
这应该照顾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注入,但看到他如何处理一个简单的字符串操作问题,我只是认为它是他的问题的最少(对现在),并假设它只会让他进一步混淆到最后。