Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net can';无法从数据库中检索所需数据,并且在关闭连接时出错_Asp.net - Fatal编程技术网

Asp.net can';无法从数据库中检索所需数据,并且在关闭连接时出错

Asp.net can';无法从数据库中检索所需数据,并且在关闭连接时出错,asp.net,Asp.net,我已经在Visual Studio 2010中创建了一个ASP.NET应用程序。从日期选择器中选择的两个日期中检索所需的数据时遇到问题。一旦我选择了这两个日期,它就会一直显示所有的数据,而不是我选择的日期。我在关闭连接时也遇到了问题,因为它给了我这个错误:“将指定的计数添加到信号量会导致它超过其最大计数。” 这是我的代码: protected void Page_Load(object sender, EventArgs e) { //getting data

我已经在Visual Studio 2010中创建了一个ASP.NET应用程序。从日期选择器中选择的两个日期中检索所需的数据时遇到问题。一旦我选择了这两个日期,它就会一直显示所有的数据,而不是我选择的日期。我在关闭连接时也遇到了问题,因为它给了我这个错误:“将指定的计数添加到信号量会导致它超过其最大计数。”

这是我的代码:

protected void Page_Load(object sender, EventArgs e)
    {    
        //getting data

        string startdate = (string)(Session["startdate"]);
        string enddate = (string)(Session["enddate"]);

        DateTime one = Convert.ToDateTime(startdate);
        DateTime two = Convert.ToDateTime(enddate);

        if (two >= one)
        {
            DataSet ds = new DataSet();
            SqlConnection conn = new SqlConnection("Data Source="";Integrated Security=True");
            conn.Open();
            SqlCommand sqlcmd = new SqlCommand("SELECT * FROM StudentTransactions WHERE TimeDate BETWEEN '" + startdate+ "' AND '" + enddate+ "'", conn);
            SqlDataReader reader = sqlcmd.ExecuteReader();
            GridView1.DataSource = reader;
            GridView1.Visible = true;
            conn.Close();
       }

假设会话变量是两个正确的日期,则不应使用字符串连接将sql命令传递给数据库,而应使用参数化查询

 string cmdText = "SELECT * FROM StudentTransactions " + 
                  "WHERE TimeDate BETWEEN @iniDT AND @endDT"
 SqlCommand sqlcmd = new SqlCommand(cmdText, conn);
 sqlCmd.Parameters.AddWithValue("@iniDT", one);
 sqlCmd.Parameters.AddWithValue("@endDT",two);

这种方法将把日期的正确格式传递给框架代码,从而避免解析问题,并关闭sql注入攻击的大门

我已经尝试过这种方法,但它仍然显示出全部数据。我在:da.selectCommand=cmd处出错。显示的错误:对象引用未设置为对象的实例。替换SqlDataAdapter da=null;这与SqlDataAdapter da=newsqldataadapter()有关;
 DataTable dt = new DataTable();
    SqlConnection conn = new SqlConnection("Data Source=MCDU-PC34\\SQLEXPRESS;Initial Catalog=ncpsdbb;Integrated Security=True");
    conn.Open();
    SqlCommand cmd = new SqlCommand("SELECT * FROM StudentTransactions WHERE TimeDate BETWEEN '" + startdate + "' AND '" + enddate + "'",conn);
    SqlDataAdapter da = null;
    da.SelectCommand = cmd;
    da.Fill(dt);
    GridView1.DataSource = dt;
    GridView1.Visible = true;
    conn.Close();