ExecuteNonQuery只对 UPDATE、INSERT 和 DELETE 语句有效,对select无效 例如:写一个检测用户名是否存在的网页 string str = "server=.;database=news;uid=newsuid;pwd=123456;"; //连接字符串 string selectsql = "SELECT UserName FROM UserInfo WHERE UserName='"+txtUserName.Text+"'"; SqlConnection conn=new SqlConnection(str); SqlCommand cmd=new SqlCommand(selectsql,conn); conn.Open(); int i=cmd.ExecuteNonQuery(); if ( i>0) //如果该用户名存在 { lblCheck.Text ="对不起,该登录名已经被占用"; txtUserName.Text = ""; } else { lblCheck.Text = "您可以使用该登录名"; } conn.Close(); } 以上做法是错误的! 原因: 1. cmd.ExecuteNonQuery();是返回受影响的行数,但是它只对update,insert,delect语句有效,而对select无效。所以语句总是返回-1,所以只能执行else语句。 2. cmd.ExecuteScalar()可以对任何语句都有效。但是他返回的是第一行第一列。如果sql语句查询出来的不是int形,则会出现错误,所以需要将sql语句修改为select count(*) from table where... 正确的写法为: string str = "server=.;database=news;uid=newsuid;pwd=123456;"; //连接字符串 string selectsql = "SELECT count(*) FROM UserInfo WHERE UserName='"+txtUserName.Text+"'"; Response.Write(selectsql); SqlConnection conn=new SqlConnection(str); SqlCommand cmd=new SqlCommand(selectsql,conn); conn.Open(); int i=Convert.ToInt32(cmd.ExecuteScalar()); if ( i>0) //如果该用户名存在 { lblCheck.Text ="对不起,该登录名已经被占用"; txtUserName.Text = ""; } else { lblCheck.Text = "您可以使用该登录名"; } conn.Close(); } 调试OK
|
|
来自: 寒木萧条 > 《SqlServer》