PDA

View Full Version : سوال: مشکل در حلقه foreach



msozan
شنبه 01 اسفند 1388, 08:24 صبح
یکی از ستون های جدولم رو میخوام اگه کاراکتر مثلا اینتر داخلش هست رو پاکش کنم برای همین اومدم اون ستونو توی یه دیتا تیبل ریختم و داخل حلقه foreach سطر به سطر چک می کنم که اگه این کاراکتر داخل این ستون هست با دستور replace اونو با کاراکتر دلخواهم پر میکنم و داخل همین حلقه با دستور update ستون اصلاحی رو جایگزین همون ستون می کنم حالا یه مشکل دارم:
حلقه foreach فقط برای اولین سطر اجرا میشه و برای سطر بعدی خطا می ده
خطای اون هم در مورد اینه که من فیلد اضافی به پروسیجر update میفرستم در صورتی که این طور نیست
چرا دفعه اول فقط اجرا میشه؟


کد:تابع showtozihat ستون توضیحات رو داخل یه دیتا تیبل میریزه:

DataTable dts = new DataTable();
int kind = 0;
dts = showtozihat(kind);

////////////////////

SqlCommand scmd = new SqlCommand();
scmd.Connection = sqlconnect;
scmd.CommandType = CommandType.StoredProcedure;
scmd.CommandText = "Dam_update_fildha";
///////////////////

foreach (DataRow drs in dts.Rows)
{
string id = "";
string date = "";
string tozihat = "";
string tosieh = "";
string tozihat_new = "";
string tosieh_new = "";
id = drs["pnumber"].ToString();
date = drs["tarikhbazdid"].ToString();
tosieh = drs["tosieh"].ToString();
tozihat = drs["tozihat"].ToString();
/////////////////////

//scmd.Parameters.AddWithValue("@type", 0);


if (tosieh.Contains('\n'))
{
tosieh_new = tosieh.Replace('\n', '-').ToString() ;
if (tosieh_new.Contains('\r'))
tosieh_new = tosieh_new.Replace('\r', '-').ToString();
}
if (tozihat.Contains('\n'))
{
tozihat_new = tozihat.Replace('\n', '-').ToString();
if (tozihat_new.Contains('\r'))
tozihat_new = tozihat_new.Replace('\r', '-').ToString();
}
if (tosieh_new == "" && tozihat_new == "")
continue;
scmd.Parameters.AddWithValue("@id", id);
scmd.Parameters.AddWithValue("@tarikh", date);
scmd.Parameters.AddWithValue("@tosieh", tosieh_new);
scmd.Parameters.AddWithValue("@tozihat", tozihat_new);

sqlconnect.Open();
scmd.ExecuteNonQuery();
sqlconnect.Close();

ali_zzr
شنبه 01 اسفند 1388, 11:13 صبح
دستور ForEach فقط برای خواند اطلاعات از درون ابجکت هایی مثل Datatable هست و با این دستور نمیتونی اطلاعات درون این آبجکتها رو تغییر بدی (تو یکی از کتابهای مایکروسافت خوندم اینو )
برای این کار از دستور
for i as integer = 0 to datatable.rows.count
استفاده کن

msozan
دوشنبه 03 اسفند 1388, 07:37 صبح
از حلقه for هم که استفاده کردم مشکلم حل نشد باز هم اون خطا رو میده:
Procedure or function Dam_update_fildha has too many arguments specified.
این خطا رو در دومین اجرا میده نمیدونم چرا؟در صورتی که مطمئنم پروسیجر مشکل نداره.
ممنون میشم کمکم کنید.

msozan
دوشنبه 03 اسفند 1388, 07:58 صبح
یعنی نمیشه دستور ExecuteNonQuery رو در حلقه اجرا کرد.
Please Help Meeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

A.S.Roma
دوشنبه 03 اسفند 1388, 08:18 صبح
بعد از ExecuteNonQuery همه پارامترهایی را که تعریف کرده اید را Remove کنید.

hadiansari
یک شنبه 22 خرداد 1390, 12:10 عصر
از حلقه for هم که استفاده کردم مشکلم حل نشد باز هم اون خطا رو میده:
Procedure or function Dam_update_fildha has too many arguments specified.
این خطا رو در دومین اجرا میده نمیدونم چرا؟در صورتی که مطمئنم پروسیجر مشکل نداره.
ممنون میشم کمکم کنید.

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


cmd.parameters.clear()

موفق باشید:لبخندساده: