PDA

View Full Version : مبتدی: مشکل در اتصال سی شارپ و اکسس



puvinax
شنبه 03 مهر 1389, 15:16 عصر
با سلام خدمت اساتید

مشکلی دارم که خواهشمندم دوستان عزیز در حل آن کمک کنند.

نام فرم برنامه : frmMain
نام دیتا گرید ویو : dgvdata
نام کلاسی که جهت کار و اتصال با پایگاه داده است : dbActions


Table Name : List
-------------------


dbActions Class




class dbActions
{
public void loadDataGrid(string sqlQueryString)
{
using (frmMain frm = new frmMain())
{
using (OleDbCommand SQLQuery = new OleDbCommand())
{
DataTable data = null;
frm.dgvdata.DataSource = null;
SQLQuery.Connection = null;
OleDbDataAdapter dataAdapter = null;
frm.dgvdata.Columns.Clear();
SQLQuery.CommandText = sqlQueryString;
SQLQuery.Connection = frmMain.database;
data = new DataTable();
dataAdapter = new OleDbDataAdapter(SQLQuery);
dataAdapter.Fill(data);
frm.dgvdata.DataSource = data;
}

}
}
}

تعریف public static OleDbConnection database


public partial class frmMain : Form
{
public static OleDbConnection database;

public frmMain()
{
InitializeComponent();
}
Form Load (Openning DB)


private void frmMain_Load(object sender, EventArgs e)
{
string connectionString = String.Format(
"Provider = Microsoft.Jet.OLEDB.4.0;Data Source ={0}\\SoftwareList.mdb"
, Application.StartupPath);
database = new OleDbConnection(connectionString);
database.Open();
string queryString = "SELECT * FROM List";
dbActions db = new dbActions();
db.loadDataGrid(queryString);
}
Closing DB



private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
database.Close();
}



مشکل من این است که برنامه هیچ اروری نمیدهد اما در دیتا گرید ویو هم هیچی نمایش داده نمی شود !!!

خواهشمندم کمک بفرمایید.

cheshm6k
شنبه 03 مهر 1389, 19:14 عصر
سلام .

گذشته از روش غیر اصولی، اشکال شما زمانیست که در کلاس، یک شی جدید از فرم ایجاد میکنید.
شما میتوانید مقدار بازگشتی تابع را به DataTable تغییر داده و بعد از پر کردن دیتاتیبل، آنرا return کنید . و در فرمی که تابع را فراخوانی میکنید به اینصورت عمل کنید :


dataGridView1.DataSource = db.loadDataGrid(queryString);


موفق باشید.

puvinax
شنبه 03 مهر 1389, 19:32 عصر
سلام .

گذشته از روش غیر اصولی، اشکال شما زمانیست که در کلاس، یک شی جدید از فرم ایجاد میکنید.
شما میتوانید مقدار بازگشتی تابع را به DataTable تغییر داده و بعد از پر کردن دیتاتیبل، آنرا return کنید . و در فرمی که تابع را فراخوانی میکنید به اینصورت عمل کنید :


dataGridView1.DataSource = db.loadDataGrid(queryString);
موفق باشید.

با سلام

ابتدا باید بگم تا اونجایی که می دونم اگر در یک کلاس بخوای به آبجکت های فرم دست پیدا کنی چون در حالت عادی شناخته نمیشن باید یک نوع از فرم ایجاد کنیم تا بشه به اشیاء عمومی فرم دست یافت برای همین در کلاس، یک شی جدید از فرم ایجاد کردم.


ثانیا می خواهم خواهش کنم منبعی معرفی کنید که روش اصولی اتصال ، Insert,Delete,Update بیان کند (هم اکسس هم SQLServer)
حقیقتش این نمونه کد رو با کمی تغییر از یکی از سمپل های سایت Codeproject بهره گرفتم.(همین کلاسش رو خودم اضافه کردم !!!)
از صبح هر منبعی که پیدا می کنم یکجاش به مشکل خورده ام این خوبشه !!! از دست این ADO.NET کلافه شدم !!! :گیج: :عصبانی++:

ثالثا من کد شما رو

dgvdata.DataSource = db.loadDataGrid(queryString);با این بخش

db.loadDataGrid(queryString);جابجا کردم ام با اررور زیر مواجه شدم :

Cannot implicitly convert type 'void' to 'object


ممنون میشم باز هم راهنمایی بفرمایید.

cheshm6k
شنبه 03 مهر 1389, 19:49 عصر
راجع به برنامه نویسی سه لایه در سایت سرچ کنید . فراوان راجع بهش صحبت شده و نمونه هایی از این روش موجود است.

شما تغییراتی که گفتم اعمال نکردید.

تابع به این صورت باید تغییر کند:



public DataTable loadDataGrid(string sqlQueryString)
{
DataTable data;
using (OleDbCommand SQLQuery = new OleDbCommand())
{
SQLQuery.CommandText = sqlQueryString;
SQLQuery.Connection = frmMain.database;
data = new DataTable();
OleDbCommand dataAdapter = new OleDbDataAdapter(SQLQuery);
dataAdapter.Fill(data);
}
return (data);
}

nafas_good
یک شنبه 04 مهر 1389, 10:24 صبح
با عرض سلام
من این برنامه را نوشتم ولی یا بهJet ایراد میگره یا به آدرس یا به پسوندش.

nafas_good
یک شنبه 04 مهر 1389, 12:24 عصر
سلام
من این برنامه رو نوشتم ولی به یک خطش ایراد می گیره(همون خطی که رنگش نارنجیه):

publicpartialclassInsertInfehrestbaha : Form
{
//************************************************** ******************
OleDbConnection connectondatabase = newOleDbConnection();

OleDbDataAdapter dataAdapter;

OleDbCommandBuilder commandbuilder;
DataTable dataTable = newDataTable();
int rowPosition = 0;


privatevoid InsertInfehrestbaha_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'database1DataSet.tbl_Fehrestbaha' table. You can move, or remove it, as needed.

this.tbl_FehrestbahaTableAdapter.Fill(this.databas e1DataSet.tbl_Fehrestbaha);
connectondatabase.ConnectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=J:\Project\DataBase\Database1.mdb";
connectondatabase.Open();

dataAdapter =
newOleDbDataAdapter("Select * From Database1", connectondatabase );

OleDbCommandBuilder commandbuilder =

newOleDbCommandBuilder(dataAdapter);

dataAdapter.Fill(dataTable);
}

cheshm6k
یک شنبه 04 مهر 1389, 12:39 عصر
سلام.
اول ،provider انتخابی شما مربوط به بانک Access 2007 است، در صورتی که بانک شما 2003.
از provider موجود در مثال دوستمون برای فایل 2003 استفاده کنید.
دوم، متن خطا رو هم بنویسید.
سوم، برای سئوال جدید، تاپیک جدید ایجاد کنید.
موفق باشید.

kahouri
چهارشنبه 07 مهر 1389, 17:19 عصر
با سلام خدمت اساتید

مشکلی دارم که خواهشمندم دوستان عزیز در حل آن کمک کنند.

نام فرم برنامه : frmMain
نام دیتا گرید ویو : dgvdata
نام کلاسی که جهت کار و اتصال با پایگاه داده است : dbActions


Table Name : List
-------------------



dbActions Class




class dbActions
{
public void loadDataGrid(string sqlQueryString)
{
using (frmMain frm = new frmMain())
{
using (OleDbCommand SQLQuery = new OleDbCommand())
{
DataTable data = null;
frm.dgvdata.DataSource = null;
SQLQuery.Connection = null;
OleDbDataAdapter dataAdapter = null;
frm.dgvdata.Columns.Clear();
SQLQuery.CommandText = sqlQueryString;
SQLQuery.Connection = frmMain.database;
data = new DataTable();
dataAdapter = new OleDbDataAdapter(SQLQuery);
dataAdapter.Fill(data);
frm.dgvdata.DataSource = data;
}


}
}
}



تعریف public static OleDbConnection database





public partial class frmMain : Form
{
public static OleDbConnection database;


public frmMain()
{
InitializeComponent();
}


Form Load (Openning DB)




private void frmMain_Load(object sender, EventArgs e)
{
string connectionString = String.Format(
"Provider = Microsoft.Jet.OLEDB.4.0;Data Source ={0}\\SoftwareList.mdb"
, Application.StartupPath);
database = new OleDbConnection(connectionString);
database.Open();
string queryString = "SELECT * FROM List";
dbActions db = new dbActions();
db.loadDataGrid(queryString);
}


Closing DB




private void frmMain_FormClosing(object sender, FormClosingEventArgs e)

{
database.Close();
}






مشکل من این است که برنامه هیچ اروری نمیدهد اما در دیتا گرید ویو هم هیچی نمایش داده نمی شود !!!




خواهشمندم کمک بفرمایید.



---------------------------
سلام مشکلت اینه که تو conection stringet بعد از provider باید // بذاری ..
تو فکرش نرو .. مشکلت جزییه راحت حل میشه
یه نمونه برات میذارم..
ایمیلتو بده .. بعد یه میل هم به من بزن
email : sadegh_kahouri@yahoo.com

k1csharpdeveloper
چهارشنبه 07 مهر 1389, 18:00 عصر
من توی یک پروژه بنام Typedataset توضیح دادم دانلود کن میفهمی