0
私は記事名と2つのテキストボックスのコンボボックスを含むtablelayoutpanelを1つは量用、もう1つはアーティクルのfinalpriceを表示するためには、 finalprice(価格*数量)が、私は得るすべての例外「このコマンドでassocietedのDataReaderはそれが最初に閉じる必要があります、既に開いている」が、閉じられたすべての読者である:/このコマンドに関連付けられているデータレアが既に開いている場合は、最初に閉じる必要があります
private void txtQ2_TextChanged(object sender, EventArgs e)
{
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
try {
int q = tableLayoutPanel1.GetRow((TextBox)sender);
ComboBox q1 = (ComboBox)tableLayoutPanel1.GetControlFromPosition(0, q);
String NameArt = q1.Text;
SqlCommand cmd2 = new SqlCommand("select PriceArticle from tbl_article where NameArticle='" + NameArt + "'", sqlCon);
SqlDataReader dr1 = cmd2.ExecuteReader();
if(dr1.Read())
{
int x = tableLayoutPanel1.GetRow(q1);
TextBox y1 = (TextBox)tableLayoutPanel1.GetControlFromPosition(1, x);
int z;
bool parseOK1 = Int32.TryParse(y1.Text, out z);
String a = dr1["PriceArticle"].ToString();
int j;
bool parseOK2 = Int32.TryParse(a, out j);
int w = j * z;
TextBox y2 = (TextBox)tableLayoutPanel1.GetControlFromPosition(2, x);
y2.Text = w.ToString();
}
dr1.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
}
なぜグローバル接続オブジェクトを保持しますか。これがあなたの問題の原因です。ローカル接続を使用して開き、使用し、閉じて処分します。あなたのコードのどこかにもうデータリーダーが残っていません。 – Steve
このコードは、SQLインジェクション攻撃に対して脆弱です。 –