نمایش نتایج 1 تا 12 از 12

نام تاپیک: كار با sqltranaction

  1. #1
    کاربر دائمی آواتار ucnazard
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تبریز
    پست
    178

    كار با sqltranaction

    اين چندمين سواليه كه اين چند وقته دارم مطرح ميكنم تا الان هيشكي نتونسته يا نخاسته جواب بده اميدوارم اين رو بشه جواب بدين.
    من توي برنامم با استفاده از چند تا شرط مختلف چند تا دستور sqlرو اجرا ميكنم كه هر كدومشون هم داراي دستورات متفاوتين اما وابسته به هم هستند كه بايد تمامي عمليات ها به درستي تو دبتابيسم ذخيره بشن من از sql transactionبه اين ترتيب استفاده كردم اما جواب نميده


    //

    foreach (DataGridViewRow rows in dataGridView1.Rows)
    {
    if (rows.Cells[1].Value != null)
    {
    string serial = rows.Cells[2].Value.ToString();
    objcom.CommandText =
    "select count(*) from goods where serial like '" + serial + "'";
    objcon.Open();
    maxcode = objcom.ExecuteScalar();
    sqltran1 = objcon.BeginTransaction();
    n = (
    int)maxcode;
    if (n == 0)//kala dar anbar mojod nist
    {
    objcom.CommandText =
    "insert into goods values(@code,@type,@model,@p_buy,@p_sale,@serial,@ tutal,@b_date,@g_date)" +
    "insert into buy_factors values(@code,@type,@model,@serial,@seller,@tutal,@ p_buy,@tarikh)" +
    "insert into tasvie values(@code,@mablagh,@takh,@par,@sod,@baghi)";
    objcom.Parameters.AddWithValue(
    "@tutal", Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    else//kala dar anbar vojod dard
    {
    objcom.CommandText =
    "select tedad from goods where serial like '" + serial + "'";
    maxcode = objcom.ExecuteScalar();
    n = (
    int)maxcode;
    objcom.CommandText =
    "update goods set tedad=@tedad where serial like '" + serial + "'" +
    "insert into tasvie values(@code,@mablagh,@takh,@par,@sod,@baghi)" +
    "insert into buy_factors values(@code,@type,@model,@serial,@seller,@tedad,@ p_buy,@tarikh)";
    objcom.Parameters.AddWithValue(
    "@tedad", n + Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    objcom.Parameters.AddWithValue(
    "@code", Int32.Parse(cod_factor.Text));
    objcom.Parameters.AddWithValue(
    "@type", rows.Cells[0].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@model", rows.Cells[1].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@p_buy", Int32.Parse(rows.Cells[4].Value.ToString()));
    objcom.Parameters.AddWithValue(
    "@p_sale", Int32.Parse(rows.Cells[5].Value.ToString()));
    objcom.Parameters.AddWithValue(
    "@serial", serial);
    objcom.Parameters.AddWithValue(
    "@b_date", bdate_txt.Text);
    objcom.Parameters.AddWithValue(
    "@g_date", rows.Cells[6].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@seller", seller_txt.Text);
    objcom.Parameters.AddWithValue(
    "@par", Int32.Parse(par_txt.Text));
    objcom.Parameters.AddWithValue(
    "@takh", Int32.Parse(takhfif_txt.Text));
    objcom.Parameters.AddWithValue(
    "@mablagh", Int32.Parse(jam_txt.Text));
    objcom.Parameters.AddWithValue(
    "@baghi", Int32.Parse(baghi.Text));
    objcom.Parameters.AddWithValue(
    "@sod", Int32.Parse(baghi.Text));
    objcom.Parameters.AddWithValue(
    "@tarikh", bdate_txt.Text);
    try
    {
    objcom.Transaction = sqltran1;
    objcom.ExecuteNonQuery();
    sqltran1.Commit();
    objcon.Close();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran1.Rollback();
    }

    }
    }

    //
    if (checkBox3.Checked)//
    {
    objcom.CommandText =
    "insert into pay_naghdi (@code,@naghd,@date,@name)";
    objcom.Parameters.AddWithValue(
    "@code", Int32.Parse(cod_factor.Text));
    objcom.Parameters.AddWithValue(
    "@naghd", Int32.Parse(naghd.Text));
    objcom.Parameters.AddWithValue(
    "@date", bdate_txt.Text);
    objcom.Parameters.AddWithValue(
    "@name", seller_txt.Text);
    objcon.Open();
    try
    {
    sqltran3 = objcon.BeginTransaction();
    objcom.Transaction = sqltran3;
    objcom.ExecuteNonQuery();
    sqltran3.Commit();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran3.Rollback();
    }
    objcon.Close();
    }
    if (checkBox2.Checked)//
    {
    foreach (DataGridViewRow item in dataGridView2.Rows)
    {
    if (item.Cells[0].Value != null)
    {
    objcom.CommandText =
    "insert into pay_chek (@code,@bname,@branch,@mablagh,@sname,@serial,@tar ikh,@stat,@m_name,@g_name)";
    objcom.Parameters.AddWithValue(
    "@code", Int32.Parse(cod_factor.Text));
    objcom.Parameters.AddWithValue(
    "@bname", item.Cells[0].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@branch", item.Cells[1].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@sname", item.Cells[2].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@mablagh", Int32.Parse(item.Cells[3].Value.ToString()));
    objcom.Parameters.AddWithValue(
    "@serial", Int32.Parse(item.Cells[4].Value.ToString()));
    objcom.Parameters.AddWithValue(
    "@tarikh", item.Cells[5].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@stat", "");
    objcom.Parameters.AddWithValue(
    "@m_name", seller_txt.Text);
    objcom.Parameters.AddWithValue(
    "@g_name", "");
    objcon.Open();
    sqltran2 = objcon.BeginTransaction();
    try
    {
    objcom.Transaction = sqltran2;
    objcom.ExecuteNonQuery();
    sqltran2.Commit();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran2.Rollback();
    }
    objcon.Close();
    }
    }
    }


    بايد تماي اطلاعات توي ديتاگريدهام تو ديتابيس ذخيره بشن و اگه سطري ذخيره نشه بقيه سطرهام نبياد ذخيره شه اما الان فقط اون سطي كه مشكل داره ذخيره نميشه
    رويداد دكمه ثبتم رو بطور كامل گذاشتم اميدوارم بتونين مشكل رو بگين
    ممنون

  2. #2

    نقل قول: كار با sqltranaction

    اين چندمين سواليه كه اين چند وقته دارم مطرح ميكنم تا الان هيشكي نتونسته يا نخاسته جواب بده اميدوارم اين رو بشه جواب بدين.
    معمولا سوالهايي بي پاسخ ميمونه كه يا سوال واضح نباشه ، يا خيلي سطح بالا باشه كه كسي ندونه موضوع چي هست و يا اينكه بيش از اندازه تكراري باشه (فقط جهت اطلاع عرض كردم)
    در مورد سوالتون هم شما به ازا هر سطر يك Transaction ايجاد ميكنيد و بعد از اجراي دستور SQL اونو Commit ميكنيد خب معلومه كه اگر هر جايي خطا بده فقط اون سطر ذخيره نميشه و بقيه سطرها بدون مشكل ذخيره ميشن. براي اينكه همه ذخيره سازيها رو توي يك Transaction بذاريد بايد كل حلقه رو توي دستورات شروع Transaction و ... قرار بديد.

  3. #3
    کاربر دائمی آواتار ucnazard
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تبریز
    پست
    178

    نقل قول: كار با sqltranaction

    مرسی از جوابتون
    یعنی کد رو بصورت زیر بنویسم؟؟
    اگه اشتباهه میشه لطف کنید رو کد نشون بدین من دفعه اولمه از این روش استفاده میکنم.

    objcon.Open();
    sqltran1 = objcon.BeginTransaction();
    foreach (DataGridViewRow rows in dataGridView1.Rows)
    {
    if (rows.Cells[1].Value != null)
    {
    string serial = rows.Cells[2].Value.ToString();
    objcom.CommandText =
    "select count(*) from goods where serial like '" + serial + "'";
    objcom.Transaction = sqltran1;
    //objcon.Open();
    maxcode = objcom.ExecuteScalar();

    n = (
    int)maxcode;
    if (n == 0)//kala dar anbar mojod nist
    {
    objcom.CommandText =
    "insert into goods values(@code,@type,@model,@p_buy,@p_sale,@serial,@ tutal,@b_date,@g_date)" +
    "insert into buy_factors values(@code,@type,@model,@serial,@seller,@tutal,@ p_buy,@tarikh)" +
    "insert into tasvie values(@code,@mablagh,@takh,@par,@sod,@baghi)";
    objcom.Parameters.AddWithValue(
    "@tutal", Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    else//kala dar anbar vojod dard
    {
    objcom.CommandText =
    "select tedad from goods where serial like '" + serial + "'";
    maxcode = objcom.ExecuteScalar();
    n = (
    int)maxcode;
    objcom.CommandText =
    "update goods set tedad=@tedad where serial like '" + serial + "'" +
    "insert into tasvie values(@code,@mablagh,@takh,@par,@sod,@baghi)" +
    "insert into buy_factors values(@code,@type,@model,@serial,@seller,@tedad,@ p_buy,@tarikh)";
    objcom.Parameters.AddWithValue(
    "@tedad", n + Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    objcom.Parameters.AddWithValue(
    "@code", Int32.Parse(cod_factor.Text));
    objcom.Parameters.AddWithValue(
    "@type", rows.Cells[0].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@model", rows.Cells[1].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@p_buy", Int32.Parse(rows.Cells[4].Value.ToString()));
    objcom.Parameters.AddWithValue(
    "@p_sale", Int32.Parse(rows.Cells[5].Value.ToString()));
    objcom.Parameters.AddWithValue(
    "@serial", serial);
    objcom.Parameters.AddWithValue(
    "@b_date", bdate_txt.Text);
    objcom.Parameters.AddWithValue(
    "@g_date", rows.Cells[6].Value.ToString());
    objcom.Parameters.AddWithValue(
    "@seller", seller_txt.Text);
    objcom.Parameters.AddWithValue(
    "@par", Int32.Parse(par_txt.Text));
    objcom.Parameters.AddWithValue(
    "@takh", Int32.Parse(takhfif_txt.Text));
    objcom.Parameters.AddWithValue(
    "@mablagh", Int32.Parse(jam_txt.Text));
    objcom.Parameters.AddWithValue(
    "@baghi", Int32.Parse(baghi.Text));
    objcom.Parameters.AddWithValue(
    "@sod", Int32.Parse(baghi.Text));
    objcom.Parameters.AddWithValue(
    "@tarikh", bdate_txt.Text);
    try
    {

    objcom.ExecuteNonQuery();
    sqltran1.Commit();

    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran1.Rollback();
    }

    }
    }
    objcon.Close();


    اینطوری وقتی تو یکی از سطرها اررور داریم تو خط
    sqltran1.Rollback();
    اکسپشن زیر رو میده
    This SqlTransaction has completed; it is no longer usable
    میشه راهنمایی کنید
    در ضمن اون تاپیکی که گفتم سعی کردم توضیح کامل بدم
    https://barnamenevis.org/showthread.p...-datagridview
    بازم ممنون

  4. #4

    نقل قول: كار با sqltranaction

    سلام.
    در BCL کلاسی وجود داره تحت عنوان TransactioScope که Enlist کردن یک Connection در Transaction رو بسیار ساده میکنه، در نتیجه نیازی به کنترل Transaction ها به شکلی که شما در کد انجام داده اید، نخواهد بود. برای اینکار می تونید بدین شکل عمل کنید:


    using (TransactionScope scope = new TransactionScope())
    {
    //Do whatever suits your needs...
    scope.Complete();
    }


    اونجاییکه که نوشتم do whatever ...، کد مورد نظرتون رو قرار بدید. بدین ترتیب، اگر اجرا به scope.Complete برسه، Transaction ما Commit میشه...

    موفق باشید.

    پاورقی: بهتره کد SQL مورد نظر رو به یک Stored Procedure منتقل کنید، سپس اون Stored Procedure رو در Loop با پارامترهای مورد نظرتون فراخوانی کنید.

  5. #5

    نقل قول: كار با sqltranaction

    كدتون رو بصورت زير تغيير بديد
    objcon.Open();
    sqltran1 = objcon.BeginTransaction();
    foreach (DataGridViewRow rows in dataGridView1.Rows)
    {
    if (rows.Cells[1].Value != null)
    {
    string serial = rows.Cells[2].Value.ToString();
    objcom.CommandText = "select count(*) from goods where serial like '" + serial + "'";
    objcom.Transaction = sqltran1;
    //objcon.Open();
    maxcode = objcom.ExecuteScalar();

    n = (int)maxcode;
    if (n == 0)//kala dar anbar mojod nist
    {
    objcom.CommandText = "insert into goods values(@code,@type,@model,@p_buy,@p_sale,@serial,@ tutal,@b_date,@g_date)" +
    "insert into buy_factors values(@code,@type,@model,@serial,@seller,@tutal,@ p_buy,@tarikh)" +
    "insert into tasvie values(@code,@mablagh,@takh,@par,@sod,@baghi)";
    objcom.Parameters.AddWithValue("@tutal", Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    else//kala dar anbar vojod dard
    {
    objcom.CommandText = "select tedad from goods where serial like '" + serial + "'";
    maxcode = objcom.ExecuteScalar();
    n = (int)maxcode;
    objcom.CommandText = "update goods set tedad=@tedad where serial like '" + serial + "'" +
    "insert into tasvie values(@code,@mablagh,@takh,@par,@sod,@baghi)" +
    "insert into buy_factors values(@code,@type,@model,@serial,@seller,@tedad,@ p_buy,@tarikh)";
    objcom.Parameters.AddWithValue("@tedad", n + Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    objcom.Parameters.AddWithValue("@code", Int32.Parse(cod_factor.Text));
    objcom.Parameters.AddWithValue("@type", rows.Cells[0].Value.ToString());
    objcom.Parameters.AddWithValue("@model", rows.Cells[1].Value.ToString());
    objcom.Parameters.AddWithValue("@p_buy", Int32.Parse(rows.Cells[4].Value.ToString()));
    objcom.Parameters.AddWithValue("@p_sale", Int32.Parse(rows.Cells[5].Value.ToString()));
    objcom.Parameters.AddWithValue("@serial", serial);
    objcom.Parameters.AddWithValue("@b_date", bdate_txt.Text);
    objcom.Parameters.AddWithValue("@g_date", rows.Cells[6].Value.ToString());
    objcom.Parameters.AddWithValue("@seller", seller_txt.Text);
    objcom.Parameters.AddWithValue("@par", Int32.Parse(par_txt.Text));
    objcom.Parameters.AddWithValue("@takh", Int32.Parse(takhfif_txt.Text));
    objcom.Parameters.AddWithValue("@mablagh", Int32.Parse(jam_txt.Text));
    objcom.Parameters.AddWithValue("@baghi", Int32.Parse(baghi.Text));
    objcom.Parameters.AddWithValue("@sod", Int32.Parse(baghi.Text));
    objcom.Parameters.AddWithValue("@tarikh", bdate_txt.Text);
    try
    {
    objcom.ExecuteNonQuery();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran1.Rollback();
    break;
    }
    }
    }
    sqltran1.Commit();
    objcon.Close();

  6. #6
    کاربر دائمی آواتار ucnazard
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تبریز
    پست
    178

    نقل قول: كار با sqltranaction

    ممنون از راهنماييتون
    يه سوال بدستور commitالان با وجود بروز خطاهم اجرا ميشه اين مشكلي نداره؟؟
    وقتي خطا وجود داره بازهم تو سطر commitهمون eception رو ميده(This SqlTransaction has completed; it is no longer usable
    )
    و وقتي كه خطا وجود نداره فقط مقادير سطر اول درست درج ميشه تو ديتابيس البته من كدم يه اررور داشت كه دستورات رو به صورت زير تغيير دادم.

    //
    //
    objcon.Open();
    sqltran1 = objcon.BeginTransaction();
    try
    {
    objcom.Transaction = sqltran1;
    foreach (DataGridViewRow rows in dataGridView1.Rows)
    {
    if (rows.Cells[1].Value != null)
    {
    string serial = rows.Cells[2].Value.ToString();
    objcom.CommandText =
    "select count(*) from goods where serial like '" + serial + "'";
    //objcon.Open();
    maxcode = objcom.ExecuteScalar();

    n = (
    int)maxcode;
    if (n == 0)//kala dar anbar mojod nist
    {
    objcom.CommandText =
    "insert into goods values('" + cod + "','" + typ + "','" + model + "','" + p_buy + "','" + p_sale + "','" + serial + "','" + total + "','" + b_date + "','" + g_date + "')" +
    "insert into buy_factors values('" + cod + "','" + typ + "','" + model + "','" + serial + "','" + seller + "','" + total + "','" + p_buy + "','" + tarikh + "')" +
    "insert into tasvie values('" + code + "','" + mablagh + "','" + takh + "','" + par + "','" + sod + "','" + baghi + "')";
    }
    else//kala dar anbar vojod dard
    {
    objcom.CommandText =
    "select tedad from goods where serial like '" + serial + "'";
    maxcode = objcom.ExecuteScalar();
    n = (
    int)maxcode;
    objcom.CommandText =
    "update goods set tedad='" + tedad + "' where serial like '" + serial + "'" +
    "insert into tasvie values('" + cod + "','" + mablagh + "','" + takh + "','" + par + "','" + sod + "','" + baghi + "')" +
    "insert into buy_factors values('" + cod + "','" + typ + "','" + model + "','" + serial + "','" + seller + "','" + total + "','" + p_buy + "','" + tarikh + "')";
    // objcom.Parameters.AddWithValue("@tedad", n + Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    total =
    Int32.Parse(rows.Cells[3].Value.ToString());
    cod =
    Int32.Parse(cod_factor.Text);
    typ = rows.Cells[0].Value.ToString();
    model = rows.Cells[1].Value.ToString();
    p_buy =
    Int32.Parse(rows.Cells[4].Value.ToString());
    p_sale =
    Int32.Parse(rows.Cells[5].Value.ToString());
    b_date = bdate_txt.Text;
    g_date = rows.Cells[6].Value.ToString();
    seller = seller_txt.Text;
    par =
    Int32.Parse(par_txt.Text);
    takh =
    Int32.Parse(takhfif_txt.Text);
    mablagh =
    Int32.Parse(jam_txt.Text);
    baghi =
    Int32.Parse(baghi_txt.Text);
    sod =
    Int32.Parse(baghi_txt.Text);
    tarikh = bdate_txt.Text;
    try
    {
    objcom.ExecuteNonQuery();

    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    // sqltran1.Rollback();
    // break;
    }
    }
    }
    sqltran1.Commit();
    objcon.Close();
    //
    if (checkBox3.Checked)//
    {
    objcom.CommandText =
    "insert into pay_naghdi ('" + cod + "','" + naghd + "','" + tarikh + "','" + seller + "')";
    cod =
    Int32.Parse(cod_factor.Text);
    naghd =
    Int32.Parse(naghd_txt.Text);
    tarikh = bdate_txt.Text;
    seller = seller_txt.Text;
    objcon.Open();
    try
    {
    // sqltran3 = objcon.BeginTransaction();
    objcom.Transaction = sqltran3;
    objcom.ExecuteNonQuery();
    // sqltran3.Commit();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    // sqltran3.Rollback();
    }
    objcon.Close();
    }
    if (checkBox2.Checked)//
    {
    foreach (DataGridViewRow item in dataGridView2.Rows)
    {

    if (item.Cells[0].Value != null)
    {
    objcom.CommandText =
    "insert into pay_chek ('" + cod + "','" + bname + "','" + brnch + "','" + mablagh + "','" + sname + "','" + serial_ch + "','" + sarresid + "','" + state + "','" + seller + "','" + g_name + "')";
    cod =
    Int32.Parse(cod_factor.Text);
    bname = item.Cells[0].Value.ToString();
    brnch = item.Cells[1].Value.ToString();
    sname = item.Cells[2].Value.ToString();
    mablagh =
    Int32.Parse(item.Cells[3].Value.ToString());
    serial_ch =
    Int32.Parse(item.Cells[4].Value.ToString());
    sarresid = item.Cells[5].Value.ToString();
    state =
    "";
    seller = seller_txt.Text;
    g_name =
    "";
    objcon.Open();
    //sqltran2 = objcon.BeginTransaction();
    try
    {
    objcom.Transaction = sqltran2;
    objcom.ExecuteNonQuery();
    // sqltran2.Commit();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    // sqltran2.Rollback();
    }
    objcon.Close();
    }
    }
    }
    //if naghdi
    sqltran1.Commit();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran1.Rollback();
    break;
    }



    كليه اين دستورات يا بايد تو ديتابيس درست درج بشن يا هيچ كدوم انجام نشن
    كمك كنيد لطفا
    آخرین ویرایش به وسیله ucnazard : چهارشنبه 27 بهمن 1389 در 16:09 عصر

  7. #7

    نقل قول: كار با sqltranaction

    وقتي خطا وجود داره بازهم تو سطر commitهمون eception رو ميده(This SqlTransaction has completed; it is no longer usable
    مشكل به خاطر كد منه ، معذرت ميخوام.
    كد رو بصورت زير تست كنيد. فقط يك Commit بايد توي كدتون باشه اونهم زمانيه كه همه كارها به درستي انجام شده.

    objcon.Open();
    sqltran1 = objcon.BeginTransaction();
    bool mustCommit = true;
    foreach (DataGridViewRow rows in dataGridView1.Rows)
    {
    if (rows.Cells[1].Value != null)
    {
    string serial = rows.Cells[2].Value.ToString();
    objcom.CommandText = "select count(*) from goods where serial like '" + serial + "'";
    objcom.Transaction = sqltran1;
    //objcon.Open();
    maxcode = objcom.ExecuteScalar();

    n = (int)maxcode;
    if (n == 0)//kala dar anbar mojod nist
    {
    objcom.CommandText = "insert into goods values('" + cod + "','" + typ + "','" + model + "','" + p_buy + "','" + p_sale + "','" + serial + "','" + total + "','" + b_date + "','" + g_date + "')" +
    "insert into buy_factors values('" + cod + "','" + typ + "','" + model + "','" + serial + "','" + seller + "','" + total + "','" + p_buy + "','" + tarikh + "')" +
    "insert into tasvie values('" + code + "','" + mablagh + "','" + takh + "','" + par + "','" + sod + "','" + baghi + "')";
    //objcom.Parameters.AddWithValue("total", Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    else//kala dar anbar vojod dard
    {
    objcom.CommandText = "select tedad from goods where serial like '" + serial + "'";
    maxcode = objcom.ExecuteScalar();
    n = (int)maxcode;
    objcom.CommandText = "update goods set total='" + tedad + "' where serial like '" + serial + "'" +
    "insert into tasvie values('" + cod + "','" + mablagh + "','" + takh + "','" + par + "','" + sod + "','" + baghi + "')" +
    "insert into buy_factors values('" + cod + "','" + typ + "','" + model + "','" + serial + "','" + seller + "','" + total + "','" + p_buy + "','" + tarikh + "')";
    // objcom.Parameters.AddWithValue("@tedad", n + Int32.Parse(rows.Cells[3].Value.ToString()));
    }
    total = Int32.Parse(rows.Cells[3].Value.ToString());
    cod = Int32.Parse(cod_factor.Text);
    typ = rows.Cells[0].Value.ToString();
    model = rows.Cells[1].Value.ToString();
    p_buy = Int32.Parse(rows.Cells[4].Value.ToString());
    p_sale = Int32.Parse(rows.Cells[5].Value.ToString());
    b_date = bdate_txt.Text;
    g_date = rows.Cells[6].Value.ToString();
    seller = seller_txt.Text;
    par = Int32.Parse(par_txt.Text);
    takh = Int32.Parse(takhfif_txt.Text);
    mablagh = Int32.Parse(jam_txt.Text);
    baghi = Int32.Parse(baghi_txt.Text);
    sod = Int32.Parse(baghi_txt.Text);
    tarikh = bdate_txt.Text;
    try
    {
    objcom.ExecuteNonQuery();

    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran1.Rollback();
    mustCommit = false;
    break;
    }
    }
    }
    //
    if (checkBox3.Checked)// صدور چك
    {
    objcom.CommandText = "insert into pay_naghdi ('" + cod + "','" + naghd + "','" + tarikh + "','" + seller + "')";
    cod = Int32.Parse(cod_factor.Text);
    naghd = Int32.Parse(naghd_txt.Text);
    tarikh = bdate_txt.Text;
    seller = seller_txt.Text;
    try
    {
    objcom.ExecuteNonQuery();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran1.Rollback();
    mustCommit = false;
    }
    }
    if (checkBox2.Checked)// پرداخت نقدي
    {
    foreach (DataGridViewRow item in dataGridView2.Rows)
    {

    if (item.Cells[0].Value != null)
    {
    objcom.CommandText = "insert into pay_chek ('" + code + "','" + bname + "','" + brnch + "','" + mablagh + "','" + sname + "','" + serial_ch + "','" + sarresid + "','" + state + "','" + seller + "','" + g_name + "')";
    cod = Int32.Parse(cod_factor.Text);
    bname = item.Cells[0].Value.ToString();
    brnch = item.Cells[1].Value.ToString();
    sname = item.Cells[2].Value.ToString();
    mablagh = Int32.Parse(item.Cells[3].Value.ToString());
    serial_ch = Int32.Parse(item.Cells[4].Value.ToString());
    sarresid = item.Cells[5].Value.ToString();
    state = "";
    seller = seller_txt.Text;
    g_name = "";
    try
    {
    objcom.ExecuteNonQuery();
    }
    catch (SqlException SqlExceptionErr)
    {
    MessageBox.Show(SqlExceptionErr.Message);
    sqltran1.Rollback();
    mustCommit = false;
    break;
    }
    }
    }
    }
    if (mustCommit)
    sqltran1.Commit();

  8. #8
    کاربر دائمی آواتار ucnazard
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تبریز
    پست
    178

    نقل قول: كار با sqltranaction

    نوشتن دستوراتsqlام اشتباهه (از متغير استفاده كردهام بجاي placeholder)؟؟؟
    الان درسته فقط مشكل اينه كه اطلاعاتي كه توي ديتاگريد هست فقط سطر اولش رو درست درج برا سطرها مقادير اوليه خود متغيرها رو درج ميكنه؟؟؟؟
    از ديتاگريد ميتونه بخونه با traceميرم جلو و امتحان كردم فقط تو درجشون اشتباه درج ميشه؟؟

  9. #9

    نقل قول: كار با sqltranaction

    نوشتن دستوراتsqlام اشتباهه (از متغير استفاده كردهام بجاي placeholder)؟؟؟
    اينكار هم امنيت كارتون رو پايين مياره (در مورد SQL Injection تحقيق كنيد) هم احتمال بروز خطا رو بالا ميبره(توي يكي از متغير هاي Stringتون و وسط محتويات اون كاراكتر ' بذاريد و كدتون رو تست كنيد). و البته موارد ديگه اي كه با جستجو ....
    الان درسته فقط مشكل اينه كه اطلاعاتي كه توي ديتاگريد هست فقط سطر اولش رو درست درج برا سطرها مقادير اوليه خود متغيرها رو درج ميكنه؟؟؟؟
    از ديتاگريد ميتونه بخونه با traceميرم جلو و امتحان كردم فقط تو درجشون اشتباه درج ميشه؟؟
    من ساختار برنامه شما رو نميدونم ولي شما بعد از ساخت دستور SQLمتيرهاتون رو تغيير ميديد فكر كنم بايد قبل از ساخت دستور اين كار رو انجام بديد.

  10. #10
    کاربر دائمی آواتار ucnazard
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تبریز
    پست
    178

    نقل قول: كار با sqltranaction

    ممنون از پیگیریتون
    متغیرهارو در ابتدای برنامه مقداردهی و تعریف کردم.
    بعد از دستورات sqlمقدارهای هر سلول رو بهشون اختصاص میدم؟؟ولی فقط رو سطر اول درسته درج میشه
    قبلا از placeholderاستفاده میکردم ولی مشکل پیش اومد که وقتی برای سطرهای بعدب دوباره اون متغیرها رو میخوند میگفت قبلا تعریف شده و خطا میگرفت نمیدونم باید چیکار کنم؟؟؟

  11. #11

    نقل قول: كار با sqltranaction

    متغیرهارو در ابتدای برنامه مقداردهی و تعریف کردم.
    بعد از دستورات sqlمقدارهای هر سلول رو بهشون اختصاص میدم؟؟ولی فقط رو سطر اول درسته درج میشه
    من نمیدونم ساختار برنامه شما چطوره و قراره چه کار انجام بدید به همین خاطر نمیتونم بگم کجای کارتون ایراد داره ، در ظاهر کدتون مشکلی نداره.
    خودتون به راحتی میتونید چک کنید ببینید مشکل کجای کارتونه ، روی خط اول کدتون یک BreakPoint بذارید و با دکمه های F10 و F11 خط به خط کدتون رو جلو برید و مقدار متغیرهاتون رو چک کنید ببینید همون مقدارهایی که میخواید رو داره یا نه ، ویا اینکه کجا مشکل داره و باعث میشه نتیجه مورد نظرتون رو نده.
    قبلا از placeholderاستفاده میکردم ولی مشکل پیش اومد که وقتی برای سطرهای بعدب دوباره اون متغیرها رو میخوند میگفت قبلا تعریف شده و خطا میگرفت نمیدونم باید چیکار کنم؟؟؟
    خب این یک چیز بدیهی است که وقتی یک پارامتر تعریف کردید بار دوم نتونید پارامتری با همون نام تعریف کنید. ساده ترین کار اینه که اول حلقه پارامترهای قبلی رو پاک کنید
    foreach (DataGridViewRow rows in dataGridView1.Rows)
    {
    objcom.Parameters.Clear();

  12. #12
    کاربر دائمی آواتار ucnazard
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تبریز
    پست
    178

    نقل قول: كار با sqltranaction

    مرسي از راهنماييتون
    بله من همين كار روهم انجام دادم يعني باF11مقدار متغيرها رو چك كردم كاملا درست برميداره موقع مقداردهي ، فقط تو درج اشتباه ميشه.
    بازم ممنون دوباره با placeholder مينويسم با اين كدي كه فرمودين، اگه مشكلي بود مزاحمتون ميشم

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •