0

ここで何をする必要があるのか​​ わかりません...動作するSQLステートメントがありますSqlCommand

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

Convert.ToDateTime(string)は、現在のカルチャでサポートされている形式を想定しています。を使用している場合yyyyMMdd、これはおそらくサポートされている形式ではありません。予想される形式については、このリンクを参照してください。

これに追加したいのですが、ロモクが提案するように、パラメーター化されたクエリを必ず使用する必要があります。

于 2013-06-24T21:53:10.140 に答える