PDA

View Full Version : مبتدی: كار با sqltranaction



ucnazard
سه شنبه 26 بهمن 1389, 22:50 عصر
اين چندمين سواليه كه اين چند وقته دارم مطرح ميكنم تا الان هيشكي نتونسته يا نخاسته جواب بده اميدوارم اين رو بشه جواب بدين.
من توي برنامم با استفاده از چند تا شرط مختلف چند تا دستور 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();
}
}
}





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

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

ucnazard
چهارشنبه 27 بهمن 1389, 12:19 عصر
مرسی از جوابتون
یعنی کد رو بصورت زیر بنویسم؟؟
اگه اشتباهه میشه لطف کنید رو کد نشون بدین من دفعه اولمه از این روش استفاده میکنم.


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
میشه راهنمایی کنید
در ضمن اون تاپیکی که گفتم سعی کردم توضیح کامل بدم
http://barnamenevis.org/showthread.php?274531-كار-با-سلول-كومبوباكس-datagridview
بازم ممنون

mehdi.mousavi
چهارشنبه 27 بهمن 1389, 12:47 عصر
سلام.
در 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 با پارامترهای مورد نظرتون فراخوانی کنید.

Reza_Yarahmadi
چهارشنبه 27 بهمن 1389, 12:50 عصر
كدتون رو بصورت زير تغيير بديد

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

ucnazard
چهارشنبه 27 بهمن 1389, 15:54 عصر
ممنون از راهنماييتون
يه سوال بدستور 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;
}



كليه اين دستورات يا بايد تو ديتابيس درست درج بشن يا هيچ كدوم انجام نشن
كمك كنيد لطفا

Reza_Yarahmadi
چهارشنبه 27 بهمن 1389, 16:19 عصر
وقتي خطا وجود داره بازهم تو سطر 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();

ucnazard
چهارشنبه 27 بهمن 1389, 16:39 عصر
نوشتن دستوراتsqlام اشتباهه (از متغير استفاده كردهام بجاي placeholder)؟؟؟
الان درسته فقط مشكل اينه كه اطلاعاتي كه توي ديتاگريد هست فقط سطر اولش رو درست درج برا سطرها مقادير اوليه خود متغيرها رو درج ميكنه؟؟؟؟
از ديتاگريد ميتونه بخونه با traceميرم جلو و امتحان كردم فقط تو درجشون اشتباه درج ميشه؟؟

Reza_Yarahmadi
چهارشنبه 27 بهمن 1389, 16:52 عصر
نوشتن دستوراتsqlام اشتباهه (از متغير استفاده كردهام بجاي placeholder)؟؟؟اينكار هم امنيت كارتون رو پايين مياره (در مورد SQL Injection تحقيق كنيد) هم احتمال بروز خطا رو بالا ميبره(توي يكي از متغير هاي Stringتون و وسط محتويات اون كاراكتر ' بذاريد و كدتون رو تست كنيد). و البته موارد ديگه اي كه با جستجو ....

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

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

Reza_Yarahmadi
پنج شنبه 28 بهمن 1389, 10:43 صبح
متغیرهارو در ابتدای برنامه مقداردهی و تعریف کردم.
بعد از دستورات sqlمقدارهای هر سلول رو بهشون اختصاص میدم؟؟ولی فقط رو سطر اول درسته درج میشه:گریه:
من نمیدونم ساختار برنامه شما چطوره و قراره چه کار انجام بدید به همین خاطر نمیتونم بگم کجای کارتون ایراد داره ، در ظاهر کدتون مشکلی نداره.
خودتون به راحتی میتونید چک کنید ببینید مشکل کجای کارتونه ، روی خط اول کدتون یک BreakPoint بذارید و با دکمه های F10 و F11 خط به خط کدتون رو جلو برید و مقدار متغیرهاتون رو چک کنید ببینید همون مقدارهایی که میخواید رو داره یا نه ، ویا اینکه کجا مشکل داره و باعث میشه نتیجه مورد نظرتون رو نده.

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

foreach (DataGridViewRow rows in dataGridView1.Rows)
{
objcom.Parameters.Clear();

ucnazard
پنج شنبه 28 بهمن 1389, 15:44 عصر
مرسي از راهنماييتون
بله من همين كار روهم انجام دادم يعني باF11مقدار متغيرها رو چك كردم كاملا درست برميداره موقع مقداردهي ، فقط تو درج اشتباه ميشه.:گیج:
بازم ممنون دوباره با placeholder مينويسم با اين كدي كه فرمودين، اگه مشكلي بود مزاحمتون ميشم:خجالت: