C# 在带有存储过程的按钮中使用委托

C# 在带有存储过程的按钮中使用委托,c#,stored-procedures,delegates,C#,Stored Procedures,Delegates,我试图写一个代码做付款和更新的状态以及。在下面的代码中,我已经完成了提交付款的逻辑,该付款工作正常,但我无法更新状态。状态是Item\u Order表中的一列,付款后必须更新该列 我的代码是: delegate void PaymentDone(); public void paySave() { SqlConnection conn1 = new SqlConnection(); try { conn

我试图写一个代码做付款和更新的状态以及。在下面的代码中,我已经完成了提交付款的逻辑,该付款工作正常,但我无法更新状态。状态是
Item\u Order
表中的一列,付款后必须更新该列

我的代码是:

 delegate void PaymentDone();

    public void paySave()
    {
        SqlConnection conn1 = new SqlConnection();
        try
        {

            conn1.ConnectionString = " 
            server=.\\ms2k5;database=Info_Connect;Trusted_Connection=true";
            conn1.Open();

            SqlCommand insertPayment = new SqlCommand("Delegate_SP", conn1);
            insertPayment.CommandType = CommandType.StoredProcedure;



            string currentDate = DateTime.Today.ToString();

            if (Convert.ToDateTime(payDate.Text) >= Convert.ToDateTime(currentDate))
            {

                insertPayment.Parameters.Add("@reciptId", SqlDbType.VarChar);
                insertPayment.Parameters["@reciptId"].Value = fullfill.Text;

                insertPayment.Parameters.Add("@payDate", SqlDbType.DateTime);
                insertPayment.Parameters["@payDate"].Value =   
                Convert.ToDateTime(payDate.Text);

                insertPayment.Parameters.Add("@balPay", SqlDbType.Float);
                insertPayment.Parameters["@balPay"].Value = Convert.ToDouble(balace.Text) - Convert.ToDouble(amnt1.Text);

                insertPayment.Parameters.Add("@payDone", SqlDbType.Float);
                insertPayment.Parameters["@payDone"].Value =    
                Convert.ToDouble(amnt1.Text);

                insertPayment.Parameters.Add("@fullfillID_FK", SqlDbType.VarChar);
                insertPayment.Parameters["@fullfillID_FK"].Value = fullfill.Text;

                insertPayment.Parameters.Add("@clintID_FK", SqlDbType.Int);
                insertPayment.Parameters["@clintID_FK"].Value = 
                (clintId_FK.Text).ToString();

                insertPayment.Parameters.Add("@operation", SqlDbType.VarChar);
                insertPayment.Parameters["@operation"].Value = 3;

                insertPayment.ExecuteNonQuery();

            }
            else
            {
                MessageBox.Show("Payment Date Should be later than Full Order Date");
            }
        }
    }

    public void payUpdate()
    {
        SqlConnection conn1 = new SqlConnection();
        try
        {
            conn1.ConnectionString = " 
            server=.\\ms2k5;database=Info_Connect;Trusted_Connection=true";
            conn1.Open();

            SqlCommand insertStaus = new SqlCommand("Delegate_SP", conn1);
            insertStaus.CommandType = CommandType.StoredProcedure;

            insertStaus.Parameters.Add("@status", SqlDbType.VarChar);
            insertStaus.Parameters["@status"].Value = "RUNING";

           if (balace.Text.Equals("0"))
            {

            insertStaus.Parameters.Add("@status", SqlDbType.VarChar);
            insertStaus.Parameters["@status"].Value = "CLOSE";
            }
            else
            {
              insertStaus.Parameters.Add("@status", SqlDbType.VarChar);
             insertStaus.Parameters["@status"].Value = "RUNING";
            }

            MessageBox.Show("3");

            insertStaus.Parameters.Add("@operation", SqlDbType.VarChar);
            insertStaus.Parameters["@operation"].Value = 2;


            insertStaus.ExecuteNonQuery();
        }
    }
我的存储过程是

ALTER PROCEDURE [dbo].[Delegate_SP]
@reciptId varchar(50)=null,
@balPay float,
@payDone float=null,
@payDate datetime=null, 
@fullfillId_FK varchar(50)=null,
@clintId_FK int=null,
@status varchar(50)=null,
@operation int,
@fullfillId varchar(50)=null


 AS

BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

if @operation=3

BEGIN
UPDATE Recipt set balPay=@balPay where reciptId=@reciptId
 if @@rowcount=0

insert into Recipt(reciptId,balPay,payDone,payDate,fullfillId_FK,clintId_FK)values
               (@reciptId,@balPay,@payDone,@payDate,@fullfillId_FK,@clintId_FK)

 update Item_Full set totCost=(select balPay from Recipt) where fullfillId=@reciptId

 END
if @operation=2

 BEGIN
  UPDATE Item_Order set status=@status where orderId=@reciptId
END
END

问题是我在
paydupdate
方法中得到了
tdsparser
异常。。。
paySave
方法工作正常

您收到的确切异常消息是什么?与Daniel的问题相同,确切的代码行可能也会有所帮助。我想这个错误与您正在使用委托这一事实无关,这看起来应该是一个event.unrelated,但我会将您的SqlConnections放在using语句中,这样它们就不会有泄漏的风险。。。