求教一下…运行出错,System.NullReferenceException: 未将对象引用设置到对象的实例,就是int returnValue=(int)da.SelectCommand.ExecuteScalar();这一行出错求指出错误并帮忙写出改正方法,谢谢了
            string u_id = textBox1.Text;
            string u_pwd = textBox2.Text;
.
.
.
.            da.SelectCommand.Parameters["@u_name"].Value = u_id;
            da.SelectCommand.Parameters["@u_pwd"].Value = u_pwd;
            int returnValue=(int)da.SelectCommand.ExecuteScalar();=========存储过程
create proc xx
(@u_name varchar,
 @u_pwd varchar)
as
if @u_pwd=(select u_pwd from Users where u_name=@u_name)
return 1
else
return 0

解决方案 »

  1.   

    在存储过程里加
    @R int output
    set @R=1
    return @R
    else 
    return @R
      

  2.   

                 object o = da.SelectCommand.ExecuteScalar();
                if (o is DBNull)
                {
                    MessageBox.Show("sss");
                }
                else { MessageBox.Show("ppp"); }
              
    我在句子后面加了以上句子出现的是ppp,看来应该是MessageBox出错了,如果我要让MessageBox弹出返回值,怎么改?
      

  3.   

    (int)da.SelectCommand.ExecuteScalar(); 
    这里,没有查询到数据返回null,所以没法转换为int型时出错楼主调试一下存储过程是否有问题
      

  4.   

    对了,搂主设置da.SelectCommand.CommandType了吗?
      

  5.   

    谢谢大家,确实发现没有返回值,那么就是SQL语句有错了
    我单独把这段话改了一点放到查询分析,
    if 'qqq'=(select u_pwd from Users where u_name='sss') 
    return 1 
    else 
    return 0检查语法就说不能使用return,怎么回事呢?如果不用2L那样传回参数而是传回return,应该怎么改?
      

  6.   

    设置了的,我把代码都放出来吧,以防前面有错。这个是我强制转换为String以后输出,结果弹窗上面什么也没有,应该是个空值了string u_id = textBox1.Text;
                string u_pwd = textBox2.Text;
                
                SqlConnection Conn = new SqlConnection(strConn);
                Conn.Open(); 
                SqlDataAdapter da = new SqlDataAdapter(); 
                da.SelectCommand = new SqlCommand(); 
                da.SelectCommand.Connection = Conn;
                da.SelectCommand.CommandText = "xx"; 
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                  da.SelectCommand.Parameters.Add("@u_name", SqlDbType.VarChar,50);
                da.SelectCommand.Parameters.Add("@u_pwd",SqlDbType.VarChar,50);
                  da.SelectCommand.Parameters["@u_name"].Value = u_id;
                da.SelectCommand.Parameters["@u_pwd"].Value = u_pwd;
                String a = (String)da.SelectCommand.ExecuteScalar();
                MessageBox.Show(a);
      

  7.   

    搂主应该用函数CREATE FUNCTION
      

  8.   

    把你的存储过程改改,没见过你这样用的,呵呵create proc xx 
    (@u_name varchar, 
    @u_pwd varchar) 
    as 
    if Exists(select 1 from Users where u_name=@u_name AND @u_pwd=u_pwd) 
    return 1 
    else 
    return 0
      

  9.   

    if 'qqq'=(select u_pwd from Users where u_name='sss') 
    print 1 
    else 
    print 0 感觉你这样写很别扭if exists(select 1 from Users where u_name='sss' and u_pwd=@u_pwd) 
    return 1 
    else 
    return 0 
      

  10.   

    把你的存储过程改改,没见过你这样用的,呵呵 
    如果用 return 的话,用那个方法你是获取不到值的create proc xx 
    (@u_name varchar, 
    @u_pwd varchar) 
    as 
    if Exists(select 1 from Users where u_name=@u_name AND @u_pwd=u_pwd) 
        SELECT 1 
    else 
        SELECT 0
      

  11.   

    噢,帮搂主google了一把,也可以用存储过程带返回参数的:
    http://hi.baidu.com/hlq58/blog/item/b418982f81152b3d1f3089ee.html
      

  12.   

    ????没明白,这应该是查询语句错了吧,而不应该是不该使用存储过程吧?一样不能用return?何解?如果按照您的做法,有传出参数,就没必要return了
      

  13.   

    “搂主应该用函数CREATE FUNCTION”指得是搂主可以使用函数,而不使用过程,函数是有返回值的
    CREATE FUNCTION是SQL Server的命令
    搂主要是用过程的话,可以看看12楼的网页,过程中的返回值的访问接收方法在C#中