如何在 asp.net 中从 SQL Server 2008 获取两个日期之间的数据
本文关键字:两个 日期 数据 之间 获取 asp net 中从 2008 Server SQL | 更新日期: 2023-09-27 18:32:59
我正在使用引用的日期选择器控件来选择日期。我收到错误
从字符串转换日期和/或时间时转换失败
public DataSet comsn(string x, DatePickerControl.DatePicker a, DatePickerControl.DatePicker b)
{
ConnectionStringSettings connectionstringsql = ConfigurationManager.ConnectionStrings["plprojectConnectionString"];
SqlConnection connectionsql = new SqlConnection(connectionstringsql.ConnectionString);
if (connectionsql.State != System.Data.ConnectionState.Open)
{
connectionsql.Open();
}
SqlCommand cmd = new SqlCommand("select a_id,commtyp,comm,primm,c_id,agent from comm where a_id= '" + x + "' AND date>= '" + a.CalendarDate + "' AND date <= '" + b.CalendarDate + "' ", connectionsql);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds, "comm"); //<------ At this line error occurred [ Conversion failed when converting date and/or time from character string ]
adp.Dispose();
return ds;
}
您可以通过控制日期格式来完成此操作。当作为字符串提供给sql服务器时,我总是使用"YYYY-MM-DD"格式化我的数据字符串,即在日期字段上使用ToString('yyyy-MM-dd'(。
但是,最好将查询转换为参数驱动的 sql。
即,代替"date>= '" a.Calendardate.ToString("yyyy-MM-dd"(
使用"日期>= @ADate">
并将参数值提供为
cmd.Parameters.Add("ADate", SqlDbType.DateTime).Value = a.Calendardate
我假设您的日期选择器具有"日期时间"属性,我将 a.Calendardate 视为日期时间属性
可以使用参数化查询来避免异常和 sql 注入。
取代:
SqlCommand cmd = new SqlCommand("select a_id,commtyp,comm,primm,c_id,agent from comm where a_id= '" + x + "' AND date>= '" + a.CalendarDate + "' AND date <= '" + b.CalendarDate + "' ", connectionsql);
跟:
string sql = "select a_id,commtyp,comm,primm,c_id,agent from comm where a_id= @x AND date>= @a AND date <= @b "
var cmd = new SqlCommand(sql);
cmd.Parameters.Add("@x", SqlDbType.NVarChar, x);
cmd.Parameters.Add("@a", SqlDbType.DateTime, a);
cmd.Parameters.Add("@b", SqlDbType.DateTime, b);
cmd.Connection = connectionsql;