behnam-soft
دوشنبه 25 شهریور 1392, 21:50 عصر
سلام خدمت دوستان
من یه برنامه در رابطه با خوندن محتویات فایل اکسل دارم، کدش رو می ذارم اینجا هم دوستان استفاده کنن هم مشکلی که خودم باهاش دارم دوستان کمک کنن برطرفشه !!!
من توسط قطعه کد زیر (که متاسفانه خیلی دقیق نمی تونم تجزیه تحلیل کنم و تغییری داخلش ایجاد کنم !) می تونم محتویات یه فایل اکسل رو بخونم و در یک تکس باکس نمایش بدم.
var fileName = @"e:\1.xlsx";
var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedType s=Text\"";
var conn = new OleDbConnection(connectionString);
conn.Open();
// var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSc hemaGuid.Tables, new object[] { null, null, null, "person" });
var cmd = conn.CreateCommand();
// cmd.CommandText = "SELECT * FROM [" + sheets.Rows[1]["A"].ToString() + "] ";
cmd.CommandText = "SELECT * FROM [Sheet1$]";
var adapter = new OleDbDataAdapter(cmd);
var ds = new DataSet();
adapter.Fill(ds);
خب، یه چندتایی مشکل خیلی کوچولو دارم که :
1- نمی دونم از چه طریقی، باید تعداد سطر های فایل رو به دست بیارم، البته میدونم که محتویاتش داخل adapter ذخیره شدن (اگر اشتباه نکنم !) اما هیچ متدی نداره که بشه تعداد سطر ها رو بدست بیارم ! از چه کدی باید استفاده کنم ؟
2- فایل اکسلی که من دارم، شامل یه ستون برای اسم کشور ها، یه ستون برای شهر ها، و یه ستون برای جمعیت و یه ستون هم برای درآمد ماهانه ست.
خب همونطور که تا به اینجای کار معلومه، اسم کشور و شهر همیشه در بانک ثابت هست اما جمعیت و درآمد هر ماه تغییر می کنه ! و ما تمامی این اطلاعات رو هر ماه از طریق فایل اکسل وارد برنامه مون می کنیم.حالا من می خوام این کار اتوماتیک انجام بشه. کوئری که من نوشتم اینه :
INSERT INTO tblkeshvar(jamiat, daramad)
VALUES ( @jamiat, @ daramad)
where (keshvar=@keshvar and shahr=@shahr)
من میام اول از طریق کد زیر:
keshvar = ds.Tables[0].Rows[i][0].ToString();
shahre = ds.Tables[0].Rows[i][1].ToString();
daramad = Int64.Parse(ds.Tables[0].Rows[i][2].ToString());
jamiat = Int64.Parse(ds.Tables[0].Rows[i][3].ToString());
tblkeshvarTableAdapter.myInsert(keshvar, shahr, daramad, jamiat);
اسم کشور و شهر و جمعیت و درآمد رو از فایل اکسل می خونم و میریزم تو متغیر ها ، اما زمانی که می خوام وارد بانک کنم، ایراد میگیره ! خودم فکر می کنم مشکل از کوئری که نوشتم باشه اما خب من راه دیگه ای به ذهنم نمی رسه !!! مشکل چیه ؟؟؟ از چه کوئری باید استفاده کنم ؟؟؟
3- الان که فایلم (که فقط برای تست کردن هست) دقیقا 4 رکورد بیشتر نداره، برنامه یه کوچولو با تاخیر اجرا میشه ! وای به حال اینکه قرارباشه هر ماه 700 تا رکورد رو بخواد بخونه و در بانک ذخیره کنه !!! این مشکل رو چطوری برطرف کنم ؟؟؟ چون می دونم چند ثانیه ای برنامه هنگ میکنه تا کارش با فایل اکسل تموم بشه !!! البته من کار با ترد و این چیزا رو هم بلد نیستم !!!
ضمنا من خوندن و نوشتن در بانک رو به روش ویزاردی انجام دادم !!!
من یه برنامه در رابطه با خوندن محتویات فایل اکسل دارم، کدش رو می ذارم اینجا هم دوستان استفاده کنن هم مشکلی که خودم باهاش دارم دوستان کمک کنن برطرفشه !!!
من توسط قطعه کد زیر (که متاسفانه خیلی دقیق نمی تونم تجزیه تحلیل کنم و تغییری داخلش ایجاد کنم !) می تونم محتویات یه فایل اکسل رو بخونم و در یک تکس باکس نمایش بدم.
var fileName = @"e:\1.xlsx";
var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedType s=Text\"";
var conn = new OleDbConnection(connectionString);
conn.Open();
// var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSc hemaGuid.Tables, new object[] { null, null, null, "person" });
var cmd = conn.CreateCommand();
// cmd.CommandText = "SELECT * FROM [" + sheets.Rows[1]["A"].ToString() + "] ";
cmd.CommandText = "SELECT * FROM [Sheet1$]";
var adapter = new OleDbDataAdapter(cmd);
var ds = new DataSet();
adapter.Fill(ds);
خب، یه چندتایی مشکل خیلی کوچولو دارم که :
1- نمی دونم از چه طریقی، باید تعداد سطر های فایل رو به دست بیارم، البته میدونم که محتویاتش داخل adapter ذخیره شدن (اگر اشتباه نکنم !) اما هیچ متدی نداره که بشه تعداد سطر ها رو بدست بیارم ! از چه کدی باید استفاده کنم ؟
2- فایل اکسلی که من دارم، شامل یه ستون برای اسم کشور ها، یه ستون برای شهر ها، و یه ستون برای جمعیت و یه ستون هم برای درآمد ماهانه ست.
خب همونطور که تا به اینجای کار معلومه، اسم کشور و شهر همیشه در بانک ثابت هست اما جمعیت و درآمد هر ماه تغییر می کنه ! و ما تمامی این اطلاعات رو هر ماه از طریق فایل اکسل وارد برنامه مون می کنیم.حالا من می خوام این کار اتوماتیک انجام بشه. کوئری که من نوشتم اینه :
INSERT INTO tblkeshvar(jamiat, daramad)
VALUES ( @jamiat, @ daramad)
where (keshvar=@keshvar and shahr=@shahr)
من میام اول از طریق کد زیر:
keshvar = ds.Tables[0].Rows[i][0].ToString();
shahre = ds.Tables[0].Rows[i][1].ToString();
daramad = Int64.Parse(ds.Tables[0].Rows[i][2].ToString());
jamiat = Int64.Parse(ds.Tables[0].Rows[i][3].ToString());
tblkeshvarTableAdapter.myInsert(keshvar, shahr, daramad, jamiat);
اسم کشور و شهر و جمعیت و درآمد رو از فایل اکسل می خونم و میریزم تو متغیر ها ، اما زمانی که می خوام وارد بانک کنم، ایراد میگیره ! خودم فکر می کنم مشکل از کوئری که نوشتم باشه اما خب من راه دیگه ای به ذهنم نمی رسه !!! مشکل چیه ؟؟؟ از چه کوئری باید استفاده کنم ؟؟؟
3- الان که فایلم (که فقط برای تست کردن هست) دقیقا 4 رکورد بیشتر نداره، برنامه یه کوچولو با تاخیر اجرا میشه ! وای به حال اینکه قرارباشه هر ماه 700 تا رکورد رو بخواد بخونه و در بانک ذخیره کنه !!! این مشکل رو چطوری برطرف کنم ؟؟؟ چون می دونم چند ثانیه ای برنامه هنگ میکنه تا کارش با فایل اکسل تموم بشه !!! البته من کار با ترد و این چیزا رو هم بلد نیستم !!!
ضمنا من خوندن و نوشتن در بانک رو به روش ویزاردی انجام دادم !!!