我在vs2005 单步调试 存储过程 数据库结果有更新
在C#程序里直接执行调用存储过程 数据库结构没有更新
一直不知道是啥问题C#代码        private bool CheckConsumeRecords()
        {
  
            bool bCheckResult = true;
            try
            {
                int NormalRecordCnt = 0, ErrorRecordCnt = 0;
                SqlCommand cmd = conn.CreateCommand();
                cmd.Transaction = tran;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "select * from TodayConsumeRecords";
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataSet dsRecords = new DataSet();
                sda.Fill(dsRecords, "TodayConsumeRecords");
                DataTable dtRecords = dsRecords.Tables["TodayConsumeRecords"];
                int iRcdId = 0;
                string strTac = "";
                string str_space = "      ";
                string strCheckValue = "";
                pbBalanceProcess.Minimum = 0;
                pbBalanceProcess.Maximum = dtRecords.Rows.Count;
                pbBalanceProcess.Value = 0;
                foreach (DataRow drRcd in dtRecords.Rows)
                {
                    iRcdId = Convert.ToInt32(drRcd["RecordId"]);
                    strTac = TacCalculator.CalculateConsumeTAC(drRcd);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "CheckConsumeRecords";
                    cmd.Parameters.AddWithValue("CheckRecord", iRcdId);
                    cmd.Parameters.AddWithValue("CheckTac", strTac);
                    cmd.Parameters.Add("CheckValue", SqlDbType.NVarChar, 10).Direction = ParameterDirection.Output;
                    int result = cmd.ExecuteNonQuery();
                    strCheckValue = Convert.ToString(cmd.Parameters["CheckValue"].Value);
                    if (strCheckValue == "OK")
                    {
                        NormalRecordCnt++;
                    }
                    else
                    {
                        ErrorRecordCnt++;
                    }
                        cmd.Parameters.Clear();
                        pbBalanceProcess.PerformStep();
                }
                         
                //报告消费数据验证完成
                lbBalanceProcess.Items.Add("消费数据验证完成");
                lbBalanceProcess.Items.Add("正确消费记录" + NormalRecordCnt + "条,错误消费记录" + ErrorRecordCnt + "条");
                bCheckResult = true;
            }
            catch (Exception err)
            {
                SystemLog.WriteSystemLog(err.Message);
                tran.Rollback();
                bCheckResult = false;
            }
            return bCheckResult;
        }
存储过程--消费数据验证存储过程
IF OBJECT_ID ( 'CheckConsumeRecords', 'P' ) IS NOT NULL 
    DROP PROCEDURE CheckConsumeRecords
GO
CREATE procedure [dbo].[CheckConsumeRecords]
@CheckRecord int,
@CheckTac nvarchar(8),
@CheckValue nvarchar(10) output
as
declare @recordtype nvarchar(10),@flag bit,@cardno nvarchar(10),@cardtype nvarchar(10)
declare @sysdate datetime,@trandate datetime,@collectdate datetime,@prevtrandate datetime
declare @recordid int,@recordtac nvarchar(8),@tranmoney int,@routeprice int,@prevrouteprice int,@prevtranmoney int
declare @hasMatch bit,@afbalance int,@bfbalance int
declare @TranDriver nvarchar(10)
--验证过程
--验证消费记录是否为正常消费记录
select @recordtype = RecordType from TodayConsumeRecords where RecordId = @CheckRecord
if @recordtype <> '001' and @recordtype <> '002'
begin
if @recordtype = '003' or @recordtype = '004'
begin
  update TodayConsumeRecords set CheckValue = 0,CheckError='001' where RecordId = @CheckRecord
  set @CheckValue = 'ERR001'
  Return
end
    if @recordtype = '005' or @recordtype = '006'
    begin
      update TodayConsumeRecords set CheckValue = 0,CheckError='002' where RecordId = @CheckRecord
  set @CheckValue = 'ERR002'
  Return
    end
end
set @CheckValue = 'OK'
GO

解决方案 »

  1.   

    没有,难道所有的update 都要commit?
      

  2.   


    update,delete,insert都要commit
      

  3.   

    你在SQL下直接执行存储过程调用,是否会出现这个情况
      

  4.   

    我在存储过程里加了一段,然后用程序执行加断点,结果ERR003是返回给程序了,但是数据库里并没有UPDATE
    --验证交易卡是否为非法卡
    if not exists(select * from EmployeeCards where CardSeqNo = (select TranCard from TodayConsumeRecords where RecordId = @CheckRecord))
    begin 
      --处理非法卡,将非法卡列入黑名单,并写入非法卡发现记录表
      select @cardtype = CardType from TodayConsumeRecords where RecordId = @CheckRecord
      begin transaction IllegalCard
      update TodayConsumeRecords set CheckValue = 0,CheckError = '003' where RecordId = @CheckRecord
      select @cardno = TranCard,@cardtype = CardType from TodayConsumeRecords where RecordId = @CheckRecord
      insert into IllegalCardRecords(IllegalCardNo,IllegalCardType,RecordDate) values(@cardno,@cardtype,getdate())
      commit transaction IllegalCard
      set @CheckValue = 'ERR003'
      Return
    end