0

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

谢谢

4

3 回答 3

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

wheredate_beforecurrentTime是您传递给方法的参数。

这应该处理sql注入的东西

于 2012-06-04T22:29:26.313 回答
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 给出 ac# 示例)

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();
}
于 2012-06-06T13:50:46.100 回答
-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变量),并且在任何情况下都可以在使用它们之前简单地做到完全万无一失TryParse(而且sql参数在这方面也做了所有的事情,没有额外的魔力)。现在,字符串连接 sql cmd错误的,但我没有建议,我只是纠正了他自己的方法。而且我本可以警告他有关 sql 注入的问题,但是看到他在简单的字符串操作方面遇到了问题,我只是判断它是最少的他的问题(现在),并认为这只会让他更加困惑。

于 2012-06-04T22:20:29.297 回答