当前位置:编程学习 > C#/ASP.NET >>

这个代码怎么返回的是-1???

代码:

try
        {
            conn = new SqlConnection("trusted_connection=true;server=.;database=NCDB");
            cmd = new SqlCommand("select count(*) from users where ulog like '"+this.txtUser.Text+"' and upass like '"+this.txtPass.Text+"'", conn);
            conn.Open();

            int val = cmd.ExecuteNonQuery();

            if (val > 0)
            {
                if (Session["code"].ToString().Equals(this.txtCode.Text))
                {
                    Response.Redirect("LoginPage.aspx");
                    Response.End();
                }
                else
                {
                    Response.Redirect("LoginError.aspx");
                    Response.End();
                }
            }
            else
            {
                Response.Redirect("LoginError.aspx");
                Response.End();
            }
        }
        catch
        {
            //Response.Redirect("LoginError.aspx");
            //Response.End();
        }
        finally
        {
            cmd.Dispose();
            conn.Close();
            conn.Dispose();
        }

我在查询分析器里是查出1的,但是在网页里的查出的是-1???返回Response.Redirect("LoginError.aspx");Response.End();怎么回事呢?Session["code"]也是对的相符的(我验证过的)。。。。谢谢指教 --------------------编程问答-------------------- like不是这么写的吧??
要加%的!~~
select count(*) from users where ulog like '%"+this.txtUser.Text+"%' and upass like '%"+this.txtPass.Text+"%'

你这是验证登陆呀,还用like呀??
--------------------编程问答-------------------- msdn的解释是返回受影响的行数,查询是不会影响数据库的,所以总是返回-1值,只有进行了update,delete,insert操作以后才会影响数据库,其返回值才不是-1.
--------------------编程问答-------------------- cmd.ExecuteNonQuery()是影像的函数,主要是添加、更新、删除时候的影响的条数
你的是查询,没有改变数据库数据,所以影响行数为-1

--------------------编程问答--------------------
引用 2 楼 luqc1985 的回复:
msdn的解释是返回受影响的行数,查询是不会影响数据库的,所以总是返回-1值,只有进行了update,delete,insert操作以后才会影响数据库,其返回值才不是-1.

正解 --------------------编程问答-------------------- like 不加 % 也是OK的,只是就相当于 = 了

问题在于:
            int val = cmd.ExecuteNonQuery(); 
请使用 
DataReader dr = cmd.ExecuteReader();
While(dr.Read())
{
   ... ...
}
来判断 --------------------编程问答-------------------- 学习了 --------------------编程问答--------------------
引用 1 楼 lixinramaxel41658133 的回复:
like不是这么写的吧??
要加%的!~~
select count(*) from users where ulog like '%"+this.txtUser.Text+"%' and upass like '%"+this.txtPass.Text+"%'

你这是验证登陆呀,还用like呀??


对SQL了解太浅 --------------------编程问答-------------------- 学习了!~ --------------------编程问答--------------------
引用 2 楼 luqc1985 的回复:
msdn的解释是返回受影响的行数,查询是不会影响数据库的,所以总是返回-1值,只有进行了update,delete,insert操作以后才会影响数据库,其返回值才不是-1.


支持。。
我以前也分不清。
MSDN可以帮你。 --------------------编程问答--------------------
引用 7 楼 luqc1985 的回复:
引用 1 楼 lixinramaxel41658133 的回复:
like不是这么写的吧??
要加%的!~~
select count(*) from users where ulog like '%"+this.txtUser.Text+"%' and upass like '%"+this.txtPass.Text+"%'

你这是验证登陆呀,还用like呀??



对SQL了解太浅

惭愧!!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,