我项目中 UI 调用 类库中的方法调用存储过程时候 总是报一个莫名其妙的错误代码如下!页面中的调用
SqlConnection cn=new SqlConnection(Connections.scon_Talkonline);
            cn.Open();
            SqlTransaction tran=cn.BeginTransaction();
            OnlineModuleLib.PointChange p = new PointChange();
            p.t_AddPointChange("A000080", 1, "7788520", "-" + 20, 20, "", "系统操作", DateTime.Now, "在线预约");
            tran.Rollback();类库中的方法
public bool t_TransAddPointChange(string MemberId, int ChangeType, string RelationId, string PointsChange, decimal SurplusPoints,string Money, string Operator, DateTime DateChanged, string Re, SqlTransaction tran)
        {
            string SP_INSERT = "dbo.sp_AddPointChange";
            try
            {
               
                object[] param = new object[9];
                param[0] = MemberId;
                param[1] = ChangeType;
                param[2] = RelationId;
                param[3] = PointsChange;
                param[4] = SurplusPoints;
                param[5] = Money;
                param[6] = Operator;
                param[7] = DateChanged;
                param[8] = Re;
                return TranSQLHelp.ExecuteNonQuery(tran, SP_INSERT, param) > 0;
            }
            catch (Exception e)
            {
                throw e;
            }
            return true;
        }存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROC [dbo].[sp_AddPointChange]
@MemberId varchar(50),
@ChangeType int,
@RelationId varchar(50),
@PointsChange varchar(50),
@SurplusPoints decimal(10,2),
@Money money,
@Operator varchar(50),
@DateChanged datetime,
@Re Varchar(50)
AS
begin
insert into dbo.T_OL_PointChange(MemberId, ChangeType, RelationId, PointsChange, SurplusPoints,Money, Operator, DateChanged, Re) 
values(@MemberId,@ChangeType,@RelationId,@PointsChange,@SurplusPoints,@Money,@Operator,@DateChanged,@Re);
return @@identity --返回最后添加的标识列
end这是建立的一个测试代码
它总是报告string 转换成decimal错误的异常,在我同事那边运行 是没有问题的,而我这里就有,代码 没有问题 检查了N次了 
测试存储过程没有任何问题,不知道是什么原因了 ,大家遇到这种情况的说说,解决方案项目依赖了,生成没问题,建立的一个新的类,把类库中的代码放进去,调用也
出现这个问题。。郁闷

解决方案 »

  1.   

    p.t_AddPointChange("A000080", 1, "7788520", "-" + 20, 20, "", "系统操作", DateTime.Now, "在线预约"); 你money参数传的是""Money 型的字段为什么要传个string呢?你还传了一个""
      

  2.   

    页面中的调用 
    SqlConnection cn=new SqlConnection(Connections.scon_Talkonline); 
                cn.Open(); 
                SqlTransaction tran=cn.BeginTransaction(); 
                OnlineModuleLib.PointChange p = new PointChange(); 
                p.t_AddPointChange("A000080", 1, "7788520", "-" + 20, 20, "", "系统操作", DateTime.Now, "在线预约"); 
                tran.Rollback(); 类库中的方法 
    public bool t_TransAddPointChange(string MemberId, int ChangeType, string RelationId, string PointsChange, decimal SurplusPoints,string Money, string Operator, DateTime DateChanged, string Re, SqlTransaction tran) 
            { 
                string SP_INSERT = "dbo.sp_AddPointChange"; 
                try 
                { 
                  
                    object[] param = new object[9]; 
                    param[0] = MemberId; 
                    param[1] = ChangeType; 
                    param[2] = RelationId; 
                    param[3] = PointsChange; 
                    param[4] = SurplusPoints; 
                    param[5] = Money; 
                    param[6] = Operator; 
                    param[7] = DateChanged; 
                    param[8] = Re; 
                    return TranSQLHelp.ExecuteNonQuery(tran, SP_INSERT, param) > 0; 
                } 
                catch (Exception e) 
                { 
                    throw e; 
                } 
                return true; 
            } --存储过程: 
    set ANSI_NULLS ON 
    set QUOTED_IDENTIFIER ON 
    go 
    ALTER PROC [dbo].[sp_AddPointChange] 
    @MemberId varchar(50), 
    @ChangeType int, 
    @RelationId varchar(50), 
    @PointsChange varchar(50), 
    @SurplusPoints decimal(10,2), 
    @Money money, 
    @Operator varchar(50), 
    @DateChanged datetime, 
    @Re Varchar(50) 
    AS 
    begin 
    insert into dbo.T_OL_PointChange(MemberId, ChangeType, RelationId, PointsChange, SurplusPoints,Money, Operator, DateChanged, Re) 
    values(@MemberId,@ChangeType,@RelationId,@PointsChange,@SurplusPoints,@Money,@Operator,@DateChanged,@Re); 
    return @@identity --返回最后添加的标识列 
    end 还是这样看舒服些
      

  3.   

    ls是对的,为空最好是System.DBNull.Value
      

  4.   

    谢谢大家了错误找到了,是money字段的问题!!我还以为是dll的问题呢,,晕死,不细心!