PDA

View Full Version : سوال: چگونگی ساخت دیتابیس اکسس مورد نیاز برنامه هنگام نصب برنامه ساخته شده



elahe1393
سه شنبه 04 آذر 1393, 09:50 صبح
سلام
من برنامه امو نوشتم میخوام فایل ستاپ برنامه رو بسازم دیتابیسم اکسس هست و خارج از پوشه اصلی برنامه است میخوام موقع نصب برنامه روی سیستم کاربر برنامه بیاد یه دیتابیس اکسس با تمام جداول و فیلدهای جداول توی مسیر دلخواه برنامه بسازه چیکار باید بکنم دیتابیسم اکسس هست
گفتم حتما باید یه کلاس برای ساخت دیتابیس و جداول بسازم و این کلاس رو تو بخش Customize Action پوشه Install تو پروژه ستاپ برنامه قرار بدم تا بیاد هنگام نصب این کلاس رو اجرا کنه ولی کلاسم یه کم و کاستی هایی داره که خودمم نمیدونم کجاشه لطفا منو راهنمایی کنید خیلی نیاز به یاری دارم
کلاسی که نوشتم هم بصورت زیر هست:
using System;
using System.IO;
using System.Data.OleDb;

namespace Create_DataBase
{
public class CreateDatabaseClass
{

private void Main()
{
Directory.CreateDirectory(@"D:db");
File.Create(@"D:db\SportDatabase.accdb");

OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";

ocm.Connection = ocn;
ocm.CommandText = "CREATE TABLE Patients(Code Number Primery Key,FirstName Text,LastName Text,Age Number,CodeMelli Text,Telephone Text,Mobile Text,Address Text,Description Text)";

ocn.Open();
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE SportDevice(SportDeviceID Text Primery Key,PatientCode Number,LeftIsEnsble Yes/No,LeftStartPoint Text,LeftEndPoint Text,LeftHardnessLevel Text,RightIsEnable Text,RightStartPoint Text,RightEndPoint Text,RightHardnessLevel Text,Reapet Number)";
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE Report(ReportID Text Primery Key,PatientCode Text,DateReport Text,StartTime Text,EndTime Text,SportDeviceSetting Text)";
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE Reapet(ReapetID Text Primery Key,SportDeviceID Text,ReportID Text,Type Yes/No,ReapetNumber Number,StartTime Text,EndTime Text,Path Memo)";
ocm.ExecuteNonQuery();

ocn.Close();
ocm.Dispose();
ocn.Dispose();
}
}
}

shahryari
سه شنبه 04 آذر 1393, 10:09 صبح
سلام
از adox استفاده کن
http://support.microsoft.com/kb/317881/en-us/

elahe1393
سه شنبه 04 آذر 1393, 11:10 صبح
مرسی
اومدم کلاسمو به شکل زیر تغییر دادم
using System;
using System.Collections.Generic;
using ADOX;
using System.Configuration.Install;
using System.Collections;
using System.Data.OleDb;
using System.ComponentModel;

namespace CreateDataBase
{

[RunInstaller(true)]
class Program :Installer
{

public override void Install(IDictionary stateSaver)
{
try
{
ADOX.CatalogClass cat = new ADOX.CatalogClass();

cat.Create("Provider=Microsoft.Jet.OLEDB.12.0;" +
"Data Source=D:\\db\\SportDatabase.accdb;" +
"Jet OLEDB:Engine Type=5");

cat = null;

OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";

ocm.Connection = ocn;
ocm.CommandText = "CREATE TABLE Patients(Code Number Primery Key,FirstName Text,LastName Text,Age Number,CodeMelli Text,Telephone Text,Mobile Text,Address Text,Description Text)";

ocn.Open();
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE SportDevice(SportDeviceID Text Primery Key,PatientCode Number,LeftIsEnsble Yes/No,LeftStartPoint Text,LeftEndPoint Text,LeftHardnessLevel Text,RightIsEnable Text,RightStartPoint Text,RightEndPoint Text,RightHardnessLevel Text,Reapet Number)";
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE Report(ReportID Text Primery Key,PatientCode Text,DateReport Text,StartTime Text,EndTime Text,SportDeviceSetting Text)";
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE Reapet(ReapetID Text Primery Key,SportDeviceID Text,ReportID Text,Type Yes/No,ReapetNumber Number,StartTime Text,EndTime Text,Path Memo)";
ocm.ExecuteNonQuery();

ocn.Close();
ocm.Dispose();
ocn.Dispose();
}
catch
{
}

base.Install(stateSaver);
}
}
}

ولی به خط کد ADOX.CatalogClass cat = new ADOX.CatalogClass(); خطای زیر رو میده
Interop type 'ADOX.CatalogClass' cannot be embedded. Use the applicable interface instead.

shahryari
سه شنبه 04 آذر 1393, 12:00 عصر
ریفرنسی را که در لینک بالا گفته رو ادد کردید
ابتدا Add Reference کن
از تب COM گزینه Microsoft ADO Ext. 2.7 for DDL and Security رو بزن

elahe1393
سه شنبه 04 آذر 1393, 12:05 عصر
ریفرنسی را که در لینک بالا گفته رو ادد کردید

Open a new Visual C#‎‎‎‎‎‎ .NET console application.
In Solution Explorer, right-click the References node and select Add Reference.
On the COM tab, select Microsoft ADO Ext. 2.7 for DDL and Security, click Select to add it to the Selected Components, and then click OK.
Delete all of the code from the code window for Class1.cs.
Paste the following code into the code window:

بله add کردم حتی CatalogClass رو شناخته ولی این خطارو میده
توی رفرنسها Microsoft ADO Ext. 2.8 for DDL and Security و Microsoft ADO Ext. 6.0 for DDL and Security موجوده که من 2.8 رو اد کردم

shahryari
سه شنبه 04 آذر 1393, 12:15 عصر
برای ساخت باید از پروایدر Jet استفاده کنید با پسوند mdb
چرا هنگام ساخت از jet و هنگام ایجاد جدولها از ACE استفاده میکند؟
public override void Install(IDictionary stateSaver)
{
try
{
ADOX.CatalogClass cat = new ADOX.CatalogClass();
string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\db\\SportDatabase.adb;";
cat.Create(connstr);

cat = null;

OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = connstr ;

ocm.Connection = ocn;
ocm.CommandText = "CREATE TABLE Patients(Code Number Primery Key,FirstName Text,LastName Text,Age Number,CodeMelli Text,Telephone Text,Mobile Text,Address Text,Description Text)";

ocn.Open();
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE SportDevice(SportDeviceID Text Primery Key,PatientCode Number,LeftIsEnsble Yes/No,LeftStartPoint Text,LeftEndPoint Text,LeftHardnessLevel Text,RightIsEnable Text,RightStartPoint Text,RightEndPoint Text,RightHardnessLevel Text,Reapet Number)";
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE Report(ReportID Text Primery Key,PatientCode Text,DateReport Text,StartTime Text,EndTime Text,SportDeviceSetting Text)";
ocm.ExecuteNonQuery();

ocm.CommandText = "CREATE TABLE Reapet(ReapetID Text Primery Key,SportDeviceID Text,ReportID Text,Type Yes/No,ReapetNumber Number,StartTime Text,EndTime Text,Path Memo)";
ocm.ExecuteNonQuery();

ocn.Close();
ocm.Dispose();
ocn.Dispose();
}
catch
{
}

base.Install(stateSaver);
}

elahe1393
سه شنبه 04 آذر 1393, 12:25 عصر
تغییر دادم ولی هنوز اون خطا سر جاشه!!!

shahryari
سه شنبه 04 آذر 1393, 12:37 عصر
من تست کردم
به راحتی دیتابیس رو ایجاد کرد و مشکلی نداره
مشکلش در ساخت جدولهاست
که اونم میتونی از خود adox کمک بگیری
راهنمای کاملش در لینک زیر هست
http://allenbrowne.com/func-adox.html

elahe1393
سه شنبه 04 آذر 1393, 13:36 عصر
من کلاس رو به شکل زیر تغییر دادم
using System;
using System.Collections.Generic;
using System.Collections;
using ADOX;
using System.Configuration.Install;
using System.ComponentModel;

namespace SportDeviceDatabase
{
[RunInstaller(true)]
public class SportDeviceDatabaseClass : Installer
{
public override void Install(IDictionary stateSaver)
{
try
{
string str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";
Catalog cat = new Catalog();
cat.Create(str);
cat.let_ActiveConnection(str);

Table tablePatients = new Table();
tablePatients.Name = "Patients";
tablePatients.Columns.Append("Code", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("FirstName", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LastName", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Age", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("CodeMelli", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Telephone", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Mobile", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Address", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Description", DataTypeEnum.adLongVarChar);
tablePatients.Keys.Append("Code", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tablePatients);

Table tableSportDevice = new Table();
tablePatients.Name = "SportDevice";
tablePatients.Columns.Append("SportDeviceID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("PatientCode", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("LeftIsEnsble", DataTypeEnum.adBoolean);
tablePatients.Columns.Append("LeftStartPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LeftEndPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LeftHardnessLevel", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightIsEnable", DataTypeEnum.adBoolean);
tablePatients.Columns.Append("RightStartPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightEndPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightHardnessLevel", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Reapet", DataTypeEnum.adNumeric);
tablePatients.Keys.Append("SportDeviceID", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tableSportDevice);

Table tableReport = new Table();
tablePatients.Name = "Report";
tablePatients.Columns.Append("ReportID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("PatientCode", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("DateReport", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("StartTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("EndTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("SportDeviceSetting", DataTypeEnum.adLongVarChar);
tablePatients.Keys.Append("ReportID", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tablePatients);

Table tableReapet = new Table();
tablePatients.Name = "Reapet";
tablePatients.Columns.Append("ReapetID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("SportDeviceID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("ReportID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Type", DataTypeEnum.adBoolean);
tablePatients.Columns.Append("ReapetNumber", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("StartTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("EndTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Path", DataTypeEnum.adLongVarWChar);
tablePatients.Keys.Append("ReapetID", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tableReapet);
}
catch
{
}

base.Install(stateSaver);
}
}
}



آیا درسته؟
حالا موقع ساخت ستاپ یه سری کارهای اولیه رو انجام میدم بعد برای اینکه ساخت دیتابیس بیاد تو زمان نصب نرم افزار میرم تو بخش فایل سیستم پروژه ستاپ primary output پروژه کلاس ساخت دیتابیس رو تو پوشه اپلیکیشن فولدر اد میکنم بعد میرم تو بخش Custom Action تو پوشهinstall فایل primary output رو اد میکنم آیا روشم درسته؟ اگه درسته چرا موقع نصب نرم افزار دیتابیس ساخته نمیشه؟؟؟؟؟؟؟؟

elahe1393
سه شنبه 04 آذر 1393, 13:38 عصر
من کلاس رو به شکل زیر تغییر دادم
using System;
using System.Collections.Generic;
using System.Collections;
using ADOX;
using System.Configuration.Install;
using System.ComponentModel;

namespace SportDeviceDatabase
{
[RunInstaller(true)]
public class SportDeviceDatabaseClass : Installer
{
public override void Install(IDictionary stateSaver)
{
try
{
string str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";
Catalog cat = new Catalog();
cat.Create(str);
cat.let_ActiveConnection(str);

Table tablePatients = new Table();
tablePatients.Name = "Patients";
tablePatients.Columns.Append("Code", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("FirstName", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LastName", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Age", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("CodeMelli", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Telephone", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Mobile", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Address", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Description", DataTypeEnum.adLongVarChar);
tablePatients.Keys.Append("Code", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tablePatients);

Table tableSportDevice = new Table();
tablePatients.Name = "SportDevice";
tablePatients.Columns.Append("SportDeviceID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("PatientCode", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("LeftIsEnsble", DataTypeEnum.adBoolean);
tablePatients.Columns.Append("LeftStartPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LeftEndPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LeftHardnessLevel", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightIsEnable", DataTypeEnum.adBoolean);
tablePatients.Columns.Append("RightStartPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightEndPoint", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightHardnessLevel", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Reapet", DataTypeEnum.adNumeric);
tablePatients.Keys.Append("SportDeviceID", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tableSportDevice);

Table tableReport = new Table();
tablePatients.Name = "Report";
tablePatients.Columns.Append("ReportID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("PatientCode", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("DateReport", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("StartTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("EndTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("SportDeviceSetting", DataTypeEnum.adLongVarChar);
tablePatients.Keys.Append("ReportID", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tablePatients);

Table tableReapet = new Table();
tablePatients.Name = "Reapet";
tablePatients.Columns.Append("ReapetID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("SportDeviceID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("ReportID", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Type", DataTypeEnum.adBoolean);
tablePatients.Columns.Append("ReapetNumber", DataTypeEnum.adNumeric);
tablePatients.Columns.Append("StartTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("EndTime", DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Path", DataTypeEnum.adLongVarWChar);
tablePatients.Keys.Append("ReapetID", KeyTypeEnum.adKeyPrimary);
cat.Tables.Append(tableReapet);
}
catch
{
}

base.Install(stateSaver);
}
}
}



آیا درسته؟
حالا موقع ساخت ستاپ یه سری کارهای اولیه رو انجام میدم بعد برای اینکه ساخت دیتابیس بیاد تو زمان نصب نرم افزار میرم تو بخش فایل سیستم پروژه ستاپ primary output پروژه کلاس ساخت دیتابیس رو تو پوشه اپلیکیشن فولدر اد میکنم بعد میرم تو بخش Custom Action تو پوشهinstall فایل primary output رو اد میکنم آیا روشم درسته؟ اگه درسته چرا موقع نصب نرم افزار دیتابیس ساخته نمیشه؟؟؟؟؟؟؟؟ آیا نیازه تغییرات دیگه ای داده بشه؟

elahe1393
سه شنبه 04 آذر 1393, 14:05 عصر
با کد بالا دیتابیس ساخته میشه ولی جداول داخل دیتابیس ساخته نشده مشکل کجاست؟ لطفا راهنمایی کنید

elahe1393
سه شنبه 04 آذر 1393, 15:38 عصر
بازم تغییراتی توی کلاس دادم تابعی که دیتابیس و جداول رو میسازه مطابق با زیر هست
public void createDatabase()
{
try
{
Connection ocn = new Connection();
Directory.CreateDirectory(@"D:\db");
string str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";
Catalog cat = new Catalog();
cat.Create(str);
ocn.Open(str);
cat.ActiveConnection = ocn;

Table tablePatients = new Table();
tablePatients.Name = "Patients";
tablePatients.Columns.Append("Code", ADOX.DataTypeEnum.adNumeric);
tablePatients.Columns.Append("FirstName", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LastName", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Age", ADOX.DataTypeEnum.adInteger);
tablePatients.Columns.Append("CodeMelli", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Telephone", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Mobile", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Address", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Description", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Keys.Append("Code", KeyTypeEnum.adKeyPrimary, "Code");
cat.Tables.Append(tablePatients);
tablePatients = null;

Table tableSportDevice = new Table();
tablePatients.Name = "SportDevice";
tablePatients.Columns.Append("SportDeviceID", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("PatientCode", ADOX.DataTypeEnum.adInteger);
tablePatients.Columns.Append("LeftIsEnsble", ADOX.DataTypeEnum.adBoolean);
tablePatients.Columns.Append("LeftStartPoint", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LeftEndPoint", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("LeftHardnessLevel", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightIsEnable", ADOX.DataTypeEnum.adBoolean);
tablePatients.Columns.Append("RightStartPoint", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightEndPoint", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("RightHardnessLevel", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Reapet", ADOX.DataTypeEnum.adInteger);
tablePatients.Keys.Append("SportDeviceID", KeyTypeEnum.adKeyPrimary, "SportDeviceID");
cat.Tables.Append(tableSportDevice);
tableSportDevice = null;

Table tableReport = new Table();
tablePatients.Name = "Report";
tablePatients.Columns.Append("ReportID", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("PatientCode", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("DateReport", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("StartTime", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("EndTime", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("SportDeviceSetting", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Keys.Append("ReportID", KeyTypeEnum.adKeyPrimary, "ReportID");
cat.Tables.Append(tableReport);
tableReport = null;

Table tableReapet = new Table();
tablePatients.Name = "Reapet";
tablePatients.Columns.Append("ReapetID", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("SportDeviceID", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("ReportID", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Type", ADOX.DataTypeEnum.adBoolean);
tablePatients.Columns.Append("ReapetNumber", ADOX.DataTypeEnum.adInteger);
tablePatients.Columns.Append("StartTime", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("EndTime", ADOX.DataTypeEnum.adLongVarChar);
tablePatients.Columns.Append("Path", ADOX.DataTypeEnum.adLongVarWChar);
tablePatients.Keys.Append("ReapetID", KeyTypeEnum.adKeyPrimary, "ReapetID");
cat.Tables.Append(tableReapet);
tableReapet = null;

cat = null;
ocn.Close();
ocn = null;
}
catch
{
}
}
پوشه ساخته میشه دیتابیسم ساخته میشه خط به خط توی ساخت جدول اول ستونها به جدول اضافه میشه ولی وقتی به خط cat.Tables.Append(tablePatients); میرسه خطای زیر رو نشون میده. مشکل کجاست؟

126031

elahe1393
شنبه 08 آذر 1393, 13:08 عصر
الان با این کدها دیتابیسمو میسازم
using System;
using System.Collections.Generic;
using System.Collections;
using ADOX;
using ADODB;
using System.Configuration.Install;
using System.ComponentModel;
using System.IO;

namespace SportDeviceDatabase
{
[RunInstaller(true)]
public class SportDeviceDatabaseClass : Installer
{
public override void Install(IDictionary stateSaver)
{
try
{
Connection ocn = new Connection();
Directory.CreateDirectory(@"D:\db");
string str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";
Catalog cat = new Catalog();
cat.Create(str);
ocn.Open(str);
cat.ActiveConnection = ocn;

Table tablePatients = new Table();
tablePatients.Name = "Patients";
tablePatients.Columns.Append("Code", ADOX.DataTypeEnum.adInteger);
tablePatients.Columns.Append("FirstName", ADOX.DataTypeEnum.adVarWChar);
tablePatients.Columns.Append("LastName", ADOX.DataTypeEnum.adVarWChar);
tablePatients.Columns.Append("Age", ADOX.DataTypeEnum.adInteger);
tablePatients.Columns.Append("CodeMelli", ADOX.DataTypeEnum.adVarWChar);
tablePatients.Columns.Append("Telephone", ADOX.DataTypeEnum.adVarWChar);
tablePatients.Columns.Append("Mobile", ADOX.DataTypeEnum.adVarWChar);
tablePatients.Columns.Append("Address", ADOX.DataTypeEnum.adVarWChar);
tablePatients.Columns.Append("Description", ADOX.DataTypeEnum.adVarWChar);
tablePatients.Keys.Append("Code", KeyTypeEnum.adKeyPrimary, "Code");
cat.Tables.Append(tablePatients);

Table tableSportDevice = new Table();
tableSportDevice.Name = "SportDevice";
tableSportDevice.Columns.Append("SportDeviceID", ADOX.DataTypeEnum.adVarWChar);
tableSportDevice.Columns.Append("PatientCode", ADOX.DataTypeEnum.adInteger);
tableSportDevice.Columns.Append("LeftIsEnsble", ADOX.DataTypeEnum.adBoolean);
tableSportDevice.Columns.Append("LeftStartPoint", ADOX.DataTypeEnum.adVarWChar);
tableSportDevice.Columns.Append("LeftEndPoint", ADOX.DataTypeEnum.adVarWChar);
tableSportDevice.Columns.Append("LeftHardnessLevel", ADOX.DataTypeEnum.adVarWChar);
tableSportDevice.Columns.Append("RightIsEnable", ADOX.DataTypeEnum.adBoolean);
tableSportDevice.Columns.Append("RightStartPoint", ADOX.DataTypeEnum.adVarWChar);
tableSportDevice.Columns.Append("RightEndPoint", ADOX.DataTypeEnum.adVarWChar);
tableSportDevice.Columns.Append("RightHardnessLevel", ADOX.DataTypeEnum.adVarWChar);
tableSportDevice.Columns.Append("Reapet", ADOX.DataTypeEnum.adInteger);
tableSportDevice.Keys.Append("SportDeviceID", KeyTypeEnum.adKeyPrimary, "SportDeviceID");
cat.Tables.Append(tableSportDevice);

Table tableReport = new Table();
tableReport.Name = "Report";
tableReport.Columns.Append("ReportID", ADOX.DataTypeEnum.adVarWChar);
tableReport.Columns.Append("PatientCode", ADOX.DataTypeEnum.adVarWChar);
tableReport.Columns.Append("DateReport", ADOX.DataTypeEnum.adVarWChar);
tableReport.Columns.Append("StartTime", ADOX.DataTypeEnum.adVarWChar);
tableReport.Columns.Append("EndTime", ADOX.DataTypeEnum.adVarWChar);
tableReport.Columns.Append("SportDeviceSetting", ADOX.DataTypeEnum.adVarWChar);
tableReport.Keys.Append("ReportID", KeyTypeEnum.adKeyPrimary, "ReportID");
cat.Tables.Append(tableReport);

Table tableReapet = new Table();
tableReapet.Name = "Reapet";
tableReapet.Columns.Append("ReapetID", ADOX.DataTypeEnum.adVarWChar);
tableReapet.Columns.Append("SportDeviceID", ADOX.DataTypeEnum.adVarWChar);
tableReapet.Columns.Append("ReportID", ADOX.DataTypeEnum.adVarWChar);
tableReapet.Columns.Append("Type", ADOX.DataTypeEnum.adBoolean);
tableReapet.Columns.Append("ReapetNumber", ADOX.DataTypeEnum.adInteger);
tableReapet.Columns.Append("StartTime", ADOX.DataTypeEnum.adVarWChar);
tableReapet.Columns.Append("EndTime", ADOX.DataTypeEnum.adVarWChar);
tableReapet.Columns.Append("Path", ADOX.DataTypeEnum.adLongVarWChar);
tableReapet.Keys.Append("ReapetID", KeyTypeEnum.adKeyPrimary, "ReapetID");
cat.Tables.Append(tableReapet);

ocn.Close();
}
catch
{
}

base.Install(stateSaver);
}
}
}


ولی حتما باید قبلش اکسس روی سیستم نصب باشه میخوام طوری این دیتابیس ساخته بشه که نیاز به نصب دستی اکسس نباشه هنگام نصب نرم افزار اکسس هم نصب بشه و دیتابیس ساخته بشه چیکار باید بکنم و اینکه هنگام ذخیره داده در دیتابیس اون فیلدهایی از نوع ADOX.DataTypeEnum.adBoolean هستند پیغام خطا در مورد نوع فیلد میده دلیلش چیه اون بخشی که میخواد توی این فیلد ذخیره بشه از فعال یا غیرفعال بودن یک checkbox میاد