打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ExecuteNonQuery对select无效
 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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
微软提供的数据访问组件SqlHelper
.net中的4种事务总结
ASP.NET系统开发(一):层层递进之SQLHelper助手类的持续优化
ADO.NET的记忆碎片(一)
关于ExecuteScalar的用法(转)
PubliSQLDAL公共数据库访问类 For SQLServer
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服