PDA

View Full Version : دسترسی و انجام عملیات، بر روی داده های ذخیره شده در Excel



Behrouz_Rad
دوشنبه 13 تیر 1384, 22:25 عصر
صورت مسئله:
دسترسی و انجام عملیات، بر روی داده های ذخیره شده در بانک Excel:
<hr>

اصول کار:
استفاده از پرووایدر OLE DB Jet به منظور دسترسی، ایجاد و اصلاح داده های ذخیره شده در بانک Excel.

توضیحات مثال:
مثال زیر شامل دو روال می باشد:

Form.Load
ایجاد یک شی OleDbDataAdapter که از پرووایدر OLE DB به منظور دسترسی و ایجاد عملیات بر روی بانک Excel استفاده می کند.

Button.Click
از شی DataAdapter ایجاد شده در روال Form.Load، به منظور اعمال تغییرات انجام شده بر روی فایل Excel استفاده می کند.

مثال نمونه:


using System;
using System.Configuration;
using System.Data;

private OleDbDataAdapter da;
private DataTable dt;

// . . .

private void ExcelForm_Load&#40;object sender, System.EventArgs e&#41;
&#123;
da = new OleDbDataAdapter&#40;"SELECT * FROM &#91;Sheet1$&#93;",
ConfigurationSettings.AppSettings&#91;"Excel_ConnectString"&#93;&#41;;

String insertSql = "INSERT INTO &#91;Sheet1$&#93; " +
"&#40;CategoryID, CategoryName, Description&#41; " +
"VALUES &#40;?, ?, ?&#41;";
da.InsertCommand =
new OleDbCommand&#40;insertSql, da.SelectCommand.Connection&#41;;
da.InsertCommand.Parameters.Add&#40;"@CategoryID", OleDbType.Integer, 0,
"CategoryID"&#41;;
da.InsertCommand.Parameters.Add&#40;"@CategoryName", OleDbType.Char, 15,
"CategoryName"&#41;;
da.InsertCommand.Parameters.Add&#40;"@Description", OleDbType.VarChar, 100,
"Description"&#41;;

String updateSql = "UPDATE &#91;Sheet1$&#93; " +
"SET CategoryName=?, Description=? " +
"WHERE CategoryID=?";
da.UpdateCommand =
new OleDbCommand&#40;updateSql, da.SelectCommand.Connection&#41;;
da.UpdateCommand.Parameters.Add&#40;"@CategoryName", OleDbType.Char, 15,
"CategoryName"&#41;;
da.UpdateCommand.Parameters.Add&#40;"@Description", OleDbType.VarChar, 100,
"Description"&#41;;
da.UpdateCommand.Parameters.Add&#40;"@CategoryID", OleDbType.Integer, 0,
"CategoryID"&#41;;

dt = new DataTable&#40; &#41;;
da.Fill&#40;dt&#41;;

dt.PrimaryKey = new DataColumn&#91;&#93; &#123;dt.Columns&#91;0&#93;&#125;;

dt.DefaultView.AllowDelete = false;
dt.DefaultView.AllowEdit = true;
dt.DefaultView.AllowNew = true;

dataGrid.DataSource = dt.DefaultView;
&#125;
private void updateButton_Click&#40;object sender, System.EventArgs e&#41;
&#123;
da.Update&#40;dt&#41;;
&#125;


توضیحات:
به منظور ایجاد ارتباط با یک بانک Excel، از پرووایدر Jet OLE DB استفاده می شود.
موتور پرووایدر Jet یا همان Jet Engine، قادر به برقراری ارتباط با فرمت های دیگر بانک های اطلاعاتی نیز می باشد.
این ارتباط، با تعیین نوع درایور بانک مربوطه – که به آن اصطلاحا ISAM یا متد دسترسی ترتیبی شاخص گذاری شده گفته می شود – در خاصیت Extended Properties کانکشن استرینگ، انجام می پذیرد.
برای استفاده از بانک های Excel نسخه 2000 به بالا، مقدار Extended Properties باید به Excel 8.0 تنظیم گردد.
مثال:


Provider=Microsoft.Jet.OLEDB.4.0;Data Source=myFile.xls;
Extended Properties="Excel 8.0;HDR=YES";

خاصیت HDR مشخص می کند که آیا در مقادیر بازیابی شونده، نام فیلدها در اولین ردیف رکوردها وجود دارد یا خیر.

توجه مهم: در Excel، مفهوم WorkSheet به جدول و مفهوم WorkBook به بانک اطلاعاتی یا همان فایل Excel اطلاق می شود.

بازیابی داده ها از WorkSheet:
روش های مختلفی به منظور بازیابی داده های ذخیره شده در فایل Excel وجود دارد.
دو روشی که بیشترین مورد استفاده را دارند عبارتند از:
1) تعیین نام Worksheet به همراه یک علامت $ در انتهای آن، به منظور انتخاب تمامی رکوردها:


SELECT * FROM &#91;MySheet$&#93;

2) تعیین محدوده ای از داده ها، همانند سینتکسی شبیه زیر:


SELECT * FROM &#91;MySheet$A1&#58;E5&#93;


دستور اس کیو ال فوق، داده های سلول های A1 تا E5 را انتخاب می کند.

ایجاد WorkSheet در بانک Excel:
با استفاده از فرمان اس کیو ال CREATE TABLE، قادر به ایجاد یک WorkSheet جدید در بانک Excel هستید.
مثال:


CREATE TABLE MySheet &#40;Field1 char&#40;10&#41;, Field2 float, Field3 date&#41;


اضافه کردن داده ها به WorkSheet:
با استفاده از دستور اس کیو ال INSERT (استاتیک یا پارامتری) می توان داده ها را به فایل Excel یا محدوده ای از سلول های WorkSheet، اضافه کرد:
مثال:


INSERT INTO &#91;MySheet$&#93; &#40;Field1, Field2, Field3&#41;
VALUES &#40;'myData', 1.234, '09/28/1979'&#41;;


اعمال تغییرات بر روی داده ها:
با استفاده از دستور اس کیو ال UPDATE (استاتیک یا پارامتری) می توان داده ها را در فایل Excel یا محدوده ای از سلول های WorkSheet، اصلاح کرد:
مثال:


UPDATE &#91;MySheet$&#93;
SET Field2 = '2.345',
Field3 = '10/18/1964'
WHERE
Field1 = 'myData'


حذف داده ها:
استفاده از دستور اس کیو ال DELETE به منظور حذف رکوردها، منجر به بروز یک خطای منطقی خواهد شد.
تنها راه حذف رکورد یا رکوردها، جایگزینی مقدار آنها با مقدار null یا خالی است.
<hr>
موفق باشید.

Farhad-Csharp
دوشنبه 10 مرداد 1384, 10:32 صبح
آقا خدا رفتگانتو بیامرزه ، شدید.

Constantine
دوشنبه 22 خرداد 1385, 09:40 صبح
بابا تو دیکه کی هستی؟ مسعود

محمد میرمصطفی
دوشنبه 22 خرداد 1385, 21:25 عصر
آقا جدا لطف فرمودید. البته من دیدم که راه حل مایکروسافت یک کم با این فرق داره. با این وجود ممنون

bahman.net
شنبه 17 تیر 1385, 23:49 عصر
خیلی ممنون

SRS534
دوشنبه 19 تیر 1385, 06:53 صبح
مرسی استاد

rtech
شنبه 25 فروردین 1386, 23:10 عصر
من اگه بخوام داده های ستونهای A,B,C,D رو فقط بازیابی کنم از چه دستوری باید استفاده کنم ؟

golihaghighi
چهارشنبه 10 مرداد 1386, 09:40 صبح
واقعا ممنون

Mohammadreza Heidari
جمعه 19 مرداد 1386, 00:57 صبح
مقاله جالبی بود خیلی ممنون

Hossein Bazyan
جمعه 09 فروردین 1387, 17:33 عصر
سلام
دست شما جناب راد درد نکنه ، یکی از زحمتکشان قسمت asp.net بی شک شما هستید.
من موارد فوق را انجام میدم ( فایل اکسل را در دیتابیس اکسس ذخیره میکنم و اطلاعات را هم ویرایش میکنم) اما نکته مهم اینه که همیشه Sheetها نامشان Sheet نیست . من برنامه ای تحت وب نوشتم که فایل اکسل را از کاربر میگیره و در بانک ذخیره میکنه و بعد از یکسری تغییرات در فایل دوم ذخیره و برای مشتری میفرستد. اما مشکلی که دارم اینه که کاربران معمولا همیشه نام Sheet ها را تغییر میدهند. من دنبال روشی هستم که بتوانم فایل اکسل را که خوندم نام Sheet های آنرا استخراج کنم . آیا راهی هست ؟

fghasempour
شنبه 31 اردیبهشت 1390, 11:01 صبح
سلام ببخشید چرا واسه من این ارور را می ده:گریه:
Object reference not set to an instance of an object.

fghasempour
شنبه 31 اردیبهشت 1390, 11:05 صبح
چرا برای من این ارور را می ده
Object reference not set to an instance of an object.:گریه::گریه::گریه: