-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();
}
4

2 に答える 2

1

オープン データ リーダーに関連付けられている接続では、コマンドを実行できません。リーダーを閉じるか、別の接続を使用する必要があります。あなたのリーダーはオープンリーダーによって独占的に使用されているためです。


ところで、あなたはSystem.InvalidOperationException詳細にキャッチしているはずですが、

このコマンドに関連付けられた開いている DataReader が既に存在し、最初に閉じる必要があります。

これがあなたができることです。

于 2012-10-11T07:50:28.103 に答える
0

while ステートメントの近くにブレークポイントを置いて、それをデバッグしてみてください。または、関数内にステップインすることもできます。Minimum_Amount テーブルに行がない場合、実行は while ループ内のコード スニペットに到達しない可能性があります。

于 2012-10-11T07:41:46.450 に答える