2012-10-11 115 views
-1

我正在嘗試向數據庫添加新值,但executenonquery無法正常工作。我已經測試並意識到,在執行非查詢之後,系統停止工作。總之,它不會起火。沒有錯誤返回。這裏是代碼:執行非查詢不起作用

else 
{ 
    double amounts = Convert.ToDouble(InstallmentPaidBox.Text); 
    string date = period.Text; 
    SqlCommand a = new SqlCommand("Select top 1* from Minimum_Amount order by Period desc", con); 
    con.Open(); 
    SqlDataReader sq = a.ExecuteReader(); 

    while (sq.Read()) 
    { 
     string date2 = sq["Period"].ToString(); 
     double amount = Convert.ToDouble(sq["Amount"]); 
     double areas = amount - (Convert.ToDouble(InstallmentPaidBox.Text) + Convert.ToDouble(BalanceBroughtTextBox.Text)); 
     double forwarded = Convert.ToDouble(BalanceBroughtTextBox.Text) + Convert.ToDouble(InstallmentPaidBox.Text); 
     double balance = areas; 
     SqlCommand cmd = new SqlCommand("insert into Cash_Position(Member_No,Welfare_Amount, BFWD,Amount,Installment_Paid,Loan_Repayment,Principal_Paid,Loan_Balance,Interest_Paid,Interest_Due,Penalty_Paid,Penalty_Due,Installment_Arrears,CFWD,Balance_Due,Period,Date_Prepared,Prepared_By) values(@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l,@m,@n,@o,@x,@p,@q)", con); 
     cmd.Parameters.Add("@a", SqlDbType.NChar).Value = MemberNumberTextBox.Text; 
     cmd.Parameters.Add("@b", SqlDbType.Money).Value = WelfareAmount.Text; 
     cmd.Parameters.Add("@c", SqlDbType.Money).Value = BalanceBroughtTextBox.Text; 
     cmd.Parameters.Add("@d", SqlDbType.Money).Value = amounts; 
     cmd.Parameters.Add("@e", SqlDbType.Money).Value = InstallmentPaidBox.Text; 
     cmd.Parameters.Add("@f", SqlDbType.Money).Value = 0; 
     cmd.Parameters.Add("@g", SqlDbType.Money).Value = PrincipalPaid.Text; 
     cmd.Parameters.Add("@h", SqlDbType.Money).Value = 0; 
     cmd.Parameters.Add("@i", SqlDbType.Money).Value = InterestPaid.Text; 
     cmd.Parameters.Add("@j", SqlDbType.Money).Value = 0; 
     cmd.Parameters.Add("@k", SqlDbType.Money).Value = PenaltyPaid.Text; 
     cmd.Parameters.Add("@l", SqlDbType.Money).Value = 0; 
     cmd.Parameters.Add("@m", SqlDbType.Money).Value = areas; 
     cmd.Parameters.Add("@n", SqlDbType.Money).Value = forwarded; 
     cmd.Parameters.Add("@o", SqlDbType.Money).Value = balance; 
     cmd.Parameters.Add("@x", SqlDbType.NChar).Value = period.Text; 
     cmd.Parameters.Add("@p", SqlDbType.Date).Value = dateOf.Text; 
     cmd.Parameters.Add("@q", SqlDbType.VarChar).Value = prepared.Text; 

     int rows = cmd.ExecuteNonQuery(); 

     if (rows > 0) 
     { 
      string script = "<script>alert('Data Successfully Added')</script>"; 
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Added", script); 
     } 
     else 
     { 
      string script = "<script>alert('Error Adding Data')</script>"; 
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", script); 
     } 
    } 
    con.Close(); 
} 
+0

你是從後臺線程做到這一點?如果是這樣,它可能會拋出一個被吞噬的異常(因爲它在後臺線程中)。 –

+0

您正在中斷連接。 – JSJ

+0

那麼,我如何確保連接不中斷 –

回答

0

嘗試在while語句附近放置斷點並對其進行調試。或者你可以在功能內進行一步。如果Minimum_Amount表中沒有行,則執行可能無法到達while循環內的代碼片段。

+0

我已經這樣做了,執行沒有達到執行完畢後的斷點 –

+0

@OwalaWilson嘗試在ExecuteReader行之後放置斷點,然後檢查返回的行數。也可以直接在數據庫上執行select查詢(select top1 ...)。 –

1

您不能在與打開的數據讀取器關聯的連接上執行任何命令。您必須關閉閱讀器或使用其他連接。因爲您的閱讀器只能由開放閱讀器使用。


順便說一句,你應該抓住的 System.InvalidOperationException的細節,

已經有一個用此命令, 必須先關閉相關聯的打開的DataReader。

Here is你可以做什麼。