分享

ExecuteNonQuery对select无效

 寒木萧条 2013-10-02
 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多