我使用的是强类型数据集(就是后缀为xsd)作为访问层,做的方法是返回一个scalar标量,在.net中调用存储过程,定义整形变量得到过程返回值.
我在存储过程里用return @@error返回,在查询分析器里面返回的都是正确的,但是在.net中得到的返回值都是null

解决方案 »

  1.   

    估计是你执行存过的方法不对,试试下面的demo:
            /// <summary>
            /// 执行SQL命令
            /// </summary>
            /// <param name="CommandText">命令文本,可以是SQL语句/存储过程/表名</param>
            /// <param name="Type">命令类型</param>
            /// <param name="Params">参数集(仅在执行存储过程时使用)</param>
            /// <returns>影响到的行数</returns>
            public int ExecuteCommand(string CommandText, CommandType Type, params object[] Params)
            {
                int iRows = 0;
                this.OpenConnection();
                SqlCommand cmd = new SqlCommand(CommandText, this.m_DbConnection);
                cmd.CommandType = Type;            if (Params != null && Type == CommandType.StoredProcedure)
                {
                    SqlCommandBuilder.DeriveParameters(cmd);
                    // 第一个参数为@Return,忽略
                    for (int i = 1; i < cmd.Parameters.Count; i++)
                        cmd.Parameters[i].Value = Params[i - 1];
                }            iRows = cmd.ExecuteNonQuery();            if (Params != null && Type == CommandType.StoredProcedure)
                {
                    // 回传参数值                for (int i = 1; i < cmd.Parameters.Count; i++)
                        Params[i - 1] = cmd.Parameters[i].Value;
                }            if (Type == CommandType.StoredProcedure)
                    iRows = (int)cmd.Parameters[0].Value;            return iRows;
            }
      

  2.   

    首先,谢谢您的回答。我再把问题仔细阐述一遍:我的存储过程是.net中创建的,应用了强类型数据集,利用TableAdapter数据集来作为数据层的,存储过程是增删改的,不管是成功或者失败,我都让他返回@@error,在逻辑层利用比如:int error=TableAdapter(对象).UpdateDate(参数...),检测error得值为null;存储过程返回的是标量的单个值。这究竟是怎么回事?请高手指教,谢谢!!!