如何在 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;
}

如何在 asp.net 中从 SQL Server 2008 获取两个日期之间的数据

您可以通过控制日期格式来完成此操作。当作为字符串提供给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;