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