0

不确定我需要在这里做什么......我有一个SqlCommand有效的 SQL 语句:

SqlCommand cmd = new SqlCommand("select * from fb_results where fb_date between '20130501' and '20130629' and fb_response = 'Yes' Order by fb_date, fb_login", conn);

现在我想用一个查询字符串参数代替硬编码的日期。

这是我的代码:

 string arg1 = Request.QueryString["date1"];
 string arg2 = Request.QueryString["date2"];
 DateTime dt1 = Convert.ToDateTime(arg1);
 DateTime dt2 = Convert.ToDateTime(arg2);
 string cvt1 = "'"+dt1.Year.ToString() + dt1.Month.ToString() + dt1.Day.ToString()+"'";
 string cvt2 = "'"+dt2.Year.ToString() + dt2.Month.ToString() + dt2.Day.ToString()+"'";
 string qry = "select * from fb_results where fb_date between " + cvt1 + " and " + cvt2;

 SqlConnection conn = new SqlConnection(Sitecore.Configuration.Settings.GetConnectionString("feedback"));
 SqlCommand cmd = new SqlCommand(qry, conn);
 //SqlCommand cmd = new SqlCommand("select * from fb_results where fb_date between '20130501' and '20130629' and fb_response = 'Yes' Order by fb_date, fb_login", conn);
 DataSet ds = new DataSet();
 SqlDataAdapter da = new SqlDataAdapter(cmd);
 da.Fill(ds);

 GridView1.DataSource = ds;
 GridView1.DataBind();

 conn.Close();

我收到一个错误

从字符串转换日期和/或时间时转换失败。

我能做些什么来纠正这个问题?感谢您提供任何帮助。问候,

4

4 回答 4

3

尝试使用参数化查询DateTime.TryParse.

DateTime dt1;
DateTime dt2;

if(!DateTime.TryParse(arg1, out dt1) && !DateTime.TryParse(arg2, out dt2))
{
    // Handle error
}

const string query = "select * from fb_results where fb_date between @from and @to";

var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@from", dt1);
command.Parameters.AddWithValue("@to", dt2);
于 2013-06-24T21:53:03.947 回答
0

dt1.Month.ToString()

如果月份编号是 1 位数字,并且您将其连接起来,您最终可能会得到如下日期:

2013624(请注意,您需要 06,而不仅仅是 6)。

相反,您可以尝试:

(dt1.Year * 10000 + dt1.Month * 100 + dt1.Day).ToString()
于 2013-06-24T21:52:52.887 回答
0

Convert.ToDateTime(string)需要当前区域性支持的格式。如果您使用的是yyyyMMdd,这很可能不是受支持的格式。有关预期格式,请参阅此链接

我想补充一点,说你绝对应该使用 Romoku 建议的参数化查询。

于 2013-06-24T21:53:10.140 回答
0

您没有考虑在日期上需要零填充。要构造的代码cvt1应该cvt2如下所示:

string cvt1 = "'"+dt1.Year.ToString("0000") + dt1.Month.ToString("00") + dt1.Day.ToString("00")+"'";
string cvt2 = "'"+dt2.Year.ToString("0000") + dt2.Month.ToString("00") + dt2.Day.ToString("00")+"'";
于 2013-06-24T21:59:59.953 回答