关于获取每一条查询语句的记录数的方法总结

最近做一个系统,碰到这个问题,就是要修改用户的密码,先要把用户的密码调出来,碰到判断用户输入的当前用户的密码是否正确的问题,就要判断返回的记录数是否大于0,下面说下我找到的一些方法(方法说明都在代码中)

 

 

 

//开始前奏部分,连接数据库 string connstr = WebConfigurationManager.ConnectionStrings["Mispersonalconn"].ConnectionString; SqlConnection Sqlconn = new SqlConnection(connstr); Sqlconn.Open(); string sql = "select * from Tb_User_Login where isnull(userName,'')='" + Session["Name"] + "' and isnull(userPass,'')='" + oldPass.Text.Trim() + "'"; SqlCommand cmd = new SqlCommand(sql, Sqlconn); //开始方法说明 ////方法二 //SqlCommand cmd = new SqlCommand("select * from Tb_User_Login where isnull(userName,'')='" + Session["Name"] + "' and isnull(userPass,'')='" + oldPass.Text.Trim() + "'", Sqlconn); //SqlDataReader read = cmd.ExecuteReader(); //int i = 0; //while (read.Read()) //{ // i++; //} //return i; /* 上面的方法还可以使用如下代码来进行判断 int row =0; row = (int)mycmd.ExecuteReade(); if(row>0) */ //方法三 写入到table中后返回第一列的记录,聪明! //DataSet ds = new DataSet(); //ds = Query("select * from tbname"); //int count = ds.Tables[0].Rows.Count; Object obresult = cmd.ExecuteScalar(); /* * 方法四--这个不适合此题 * int num = (int)cmd.ExecuteNonQuery(); * 使用这个是返回受影响的行数,对select无效,仅对更新,修改等语句有效 * * / /* * 方法一 * 因为ExecuteScalar()返回第一列,第一行的数据。第一列第一行不为空,那么 * ExecuteScalar就直接对应的值,但是如果使用的是对象的话,象我上面那样,那 * 么还要经过一道转换,如整数需要Convert.Int32(obresult)才能获得第一行第 * 一列的值。 * 但是有第一行,但是第一列为空,那么返回的是 DBNull 。一行都没有,那么 * ExecuteScalar就返回null * 如果没有转换,则可以直接用我下面的方法:obresult == null来判断查询结果 * 如果不想这样,还可以使用Convert.Tostring()来转换为字符型的空,然后来判断 */ if (obresult == null) { lbMessage.Text = "当前登陆用户的密码与输入的旧密码不匹配,请重新输入!"; return; } else { sql = "update [Tb_User_Login] set userPass='" + NewTxtPass.Text.Trim() + "'" + "where userName='" + Session["Name"] + "'"; SqlCommand sc = new SqlCommand(sql, Sqlconn); sc.ExecuteNonQuery(); lbMessage.Text = "修改密码成功!请重新登陆!"; Sqlconn.Close(); Response.Redirect("Logout.aspx"); } } 

你可能感兴趣的:(sql,session,String,null,login,dataset)