PDA

View Full Version : اجرای تراکنش در حلقه DataReader



ghameshloe
چهارشنبه 17 شهریور 1389, 12:36 عصر
با سلام به همهی دوستان
مشکل این کد چیه



protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["smsdb13890617con"].ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT MAX([idrolswg]+1) FROM [rolworkgroup]", con);
con.Open();
int result =(int) cmd.ExecuteScalar();
con.Close();
Label1.Text = result.ToString();
SqlCommand cmd1 = new SqlCommand("SELECT [namepage] FROM [rolpageworkgroup]", con);
SqlDataReader datareader;
con.Open();
datareader = cmd1.ExecuteReader();
while (datareader.Read())
{
string page = datareader["namepage"].ToString();
SqlCommand cmd2 = new SqlCommand("insert into [rolpageworkgroup] (idrolswg,namepage,state) values (@idrolswg,@namepage,False)", con);
cmd2.Parameters.AddWithValue("@idrolswg", result);
cmd2.Parameters.AddWithValue("@namepage", page);
cmd2.ExecuteNonQuery();

}
con.Close();

}

ASPX
چهارشنبه 17 شهریور 1389, 12:46 عصر
كارت درست نيست بهتره اين كار رو با sp انجام بدي
ولي
اين خط رو اگر براش كانكشن جديد بسازي درست ميشه cmd2 نياز به يك con2 داره
كه open و close بشه


SqlCommand cmd2 = new SqlCommand("insert into [rolpageworkgroup] (idrolswg,namepage,state) values (@idrolswg,@namepage,False)", con);

از يك تابع استفاده كن

ghameshloe
چهارشنبه 17 شهریور 1389, 12:53 عصر
با تشکر از توجه شما من این کار را هم کردم اما جواب نداد



protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["smsdb13890617con"].ConnectionString);
SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrin gs["smsdb13890617con"].ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT MAX([idrolswg]+1) FROM [rolworkgroup]", con);
con.Open();
int result =(int) cmd.ExecuteScalar();
con.Close();
Label1.Text = result.ToString();
SqlCommand cmd1 = new SqlCommand("SELECT [namepage] FROM [rolpageworkgroup]", con);
SqlDataReader datareader;
con.Open();
datareader = cmd1.ExecuteReader();
while (datareader.Read())
{
string page = datareader["namepage"].ToString();
SqlCommand cmd2 = new SqlCommand("insert into [rolpageworkgroup] (idrolswg,namepage,state) values (@idrolswg,@namepage,False)", con1);
cmd2.Parameters.AddWithValue("@idrolswg", result);
cmd2.Parameters.AddWithValue("@namepage", page);
con1.Open();
cmd2.ExecuteNonQuery();
con1.Close();

}
}

Saber_Fatholahi
چهارشنبه 17 شهریور 1389, 13:13 عصر
دوست من شما فرض کن برنامه ات 100 تا رکورد داره اونوقت حدود صد و خورده ای باید با بانک ارتباط برقرار کنی اگه تعداد رکورداد بره بالا که یعنی فاجعه برنامه ات اصلا بالا نمیاد
چرا این کارو با Cursor توی SQL انجام نمی دی؟
یه SP تعریف کن و کارهات داخل اون انجام بده
من پیشنهاد می کنم برو به تالار SQL در موردی که گفتم کمی سرچ کن تا جوا ب بگیری
موفق باشی