Asp.net 无法从数据库中检索所需数据

Asp.net 无法从数据库中检索所需数据,asp.net,sql-server,gridview,data-binding,ado.net,Asp.net,Sql Server,Gridview,Data Binding,Ado.net,我已经在Visual Studio 2010中创建了一个ASP.NET应用程序。从日期选择器中选择的两个日期中检索所需的数据时遇到问题。一旦我选择了这两个日期,它就会一直显示所有的数据,而不是我选择的日期 这是我的代码: protected void Page_Load(object sender, EventArgs e) { string startdate = (string)Session["startdate"]; string enddate = (string)Se

我已经在Visual Studio 2010中创建了一个ASP.NET应用程序。从日期选择器中选择的两个日期中检索所需的数据时遇到问题。一旦我选择了这两个日期,它就会一直显示所有的数据,而不是我选择的日期

这是我的代码:

protected void Page_Load(object sender, EventArgs e)
{
    string startdate = (string)Session["startdate"];
    string enddate = (string)Session["enddate"];
    DateTime one = Convert.ToDateTime(startdate);
    DateTime two = Convert.ToDateTime(enddate);

    if (DateTime.Compare(two, one)>=0)
    {
        SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=ncpsdbb;Integrated Security=True");
        conn.Open();

        SqlCommand sqlcmd = new SqlCommand("SELECT * FROM StudentTransactions WHERE TimeDate BETWEEN '" + startdate + "' AND '" + enddate + "')", conn);

        SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
        DataSet ds = new DataSet();
        da.Fill(ds);

        GridView1.Visible = true;
        GridView1.DataBind();

        conn.Close();
    }
    else
    {
       GridView1.Visible = false;
       string strMsg = " Data not found for the choosen dates.";
       Response.Write("<script>alert('" + strMsg + "')</script>");
    }
}

还请注意命令字符串中的parantesses错误。

我最初的观察结果是,SQL中存在一个不匹配的错误-我想知道您的命令是否只是抛出了一个异常

我要尝试的第一件事是参数化它;除了是一个非常好的主意之外,它还可以避免格式化日期中的dd/MM和MM/dd问题:

if(two >= one)
{
    DataSet ds = new DataSet();
    using(var conn = new SqlConnection("Data Source=localhost;Initial Catalog=ncpsdbb;Integrated Security=True"))
    using(var sqlcmd = new SqlCommand("SELECT * FROM StudentTransactions WHERE TimeDate BETWEEN @start AND @end", conn))
    using(var da = new SqlDataAdapter(sqlcmd))
    {
        sqlcmd.Parameters.AddWithValue("start", one);
        sqlcmd.Parameters.AddWithValue("end", two);
        conn.Open();
        da.Fill(ds);
    }
}

您的代码易受攻击。永远不要将SQL语句连接在一起--永远!一旦它到达da.Fillds;我遇到了这个错误:将表达式转换为数据类型datetime时出现算术溢出错误。@PorWeiting什么是TimeDate的列类型?i、 e.如何在数据库中定义?我的TimeDate列类型为:nvarchar50@PorWeiting是的,这是个问题;该列应该是date或datetime,否则最多只能按字母顺序进行比较。数据库中的日期应存储为类型化值数据库类型日期/日期时间是否可以存储dd/mm/yyyy格式的数据?
if(two >= one)
{
    DataSet ds = new DataSet();
    using(var conn = new SqlConnection("Data Source=localhost;Initial Catalog=ncpsdbb;Integrated Security=True"))
    using(var sqlcmd = new SqlCommand("SELECT * FROM StudentTransactions WHERE TimeDate BETWEEN @start AND @end", conn))
    using(var da = new SqlDataAdapter(sqlcmd))
    {
        sqlcmd.Parameters.AddWithValue("start", one);
        sqlcmd.Parameters.AddWithValue("end", two);
        conn.Open();
        da.Fill(ds);
    }
}