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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。