PDA

View Full Version : مبتدی: عدم تغییر دیتابیس پروژه بعد از اعمال تغییر در برنامه



afi_program
سه شنبه 06 مرداد 1394, 00:17 صبح
سلام.
ابتدا از ابتدایی بودن سوال معذرت میخوام.
دوم اینکه خواهشا نگید بگرد پیدا میکنی!!
سوم: پیشاپیش ممنون از وقتتون که میگذارید.


حالا سوالم:
یه دیتابیس اکسس دارم که با oledb بهش وصل شدم و داده هاشو توی یک datagridview نشون میدم.
یه دکمه دارم که با زدن داده به dataadapter اضافه میکنه و توی datagridview نشون میده. ولی این تغییر توی دیتابیس اعمال نمیشه.
چیکار کنم؟

یه همچین کوئری میخوام اجرا بشه: OleDbConnection aaa = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Office_Assistant.accdb");
aaa.Open();


string query = "INSERT INTO engineers(Engineer_File_NO, Engineer_Base,Engineer_Field,Engineer_Name,Enginee r_Family,Engineer_Phone, Engineer_BankAccount) VALUES(5,5,\"aa\",\"qqqq\",\"qqqq\",9,9)";
OleDbCommand command = new OleDbCommand();
command.CommandText = query;
command.Connection = aaa;
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = command;
DataTable objDataTable = new DataTable();
adapter.Fill(objDataTable);


aaa.Close();

با تشکر

دلتنگ اسمان
سه شنبه 06 مرداد 1394, 08:55 صبح
با سلام
مگر برای ثبت در دیتابیس نباید از قطعه کد زیر استفاده کنید:

command.ExecuteNonQuery();

محمد رضا فاتحی
سه شنبه 06 مرداد 1394, 09:09 صبح
شما می خواین ورود اطلاعات به دیتابیس رو با adapter.Fill(objDataTable); انجام بدید؟؟؟ اینکه اشتباهه



aaa.Open();


string query = "INSERT INTO engineers(Engineer_File_NO, Engineer_Base,Engineer_Field,Engineer_Name,Enginee r_Family,Engineer_Phone, Engineer_BankAccount) VALUES(5,5,\"aa\",\"qqqq\",\"qqqq\",9,9)";
OleDbCommand command = new OleDbCommand();
command.CommandText = query;
command.Connection = aaa;
command.ExecuteNonQuery();
aaa.Close();

afi_program
سه شنبه 06 مرداد 1394, 10:24 صبح
سلام.
ممنون از پاسختون. ولی همچنان مشکل پا برجاست. تغییری که انجام میدم توی گریدویو نشون داده میشه ولی روی دیتابیس اعمال نمیشه!!!
adapter.Fill(objDataTable);



دقیقا کار این کد چیه؟

دلتنگ اسمان
سه شنبه 06 مرداد 1394, 10:56 صبح
اون کد باعث میشه اطلاعات از datapter در جدولی به نام objdadtatable پر شود.
کد زیر رو قرار بده و نتیجه رو بگو :

int Engineer_File_NO = 5;
int Engineer_Base = 5;
string Engineer_Field = "\"aa\"";
string Engineer_Name = "\"qqqq\"";
string Engineer_Family = "\"qqqqq\"";
int Engineer_Phone=9;
int Engineer_BankAccount = 9;

string sql = "INSERT INTO engineers(Engineer_File_NO, Engineer_Base,Engineer_Field,Engineer_Name,Enginee r_Family,Engineer_Phone, Engineer_BankAccount)" +
" values ({0},{1},'{2}','{3}','{4}',{5},{6})";

sql = string.Format(sql,
Engineer_File_NO, Engineer_Base, Engineer_Field, Engineer_Name, Engineer_Family, Engineer_Phone, Engineer_BankAccount);

com.CommandText = sql;

con.Open();
com.ExecuteNonQuery();
con.Close();

afi_program
سه شنبه 06 مرداد 1394, 11:13 صبح
خطایی با مضمون زیر میده:ExecuteNonQuery: Connection property has not been initialized.


در مورد کدی که گذاشتید: جایی که دارید کوئری مینویسید بعد از values مفهوم {0} و .. چیه؟

خیلی ممنون

محمد رضا فاتحی
سه شنبه 06 مرداد 1394, 11:38 صبح
کانکشنتون تنظیم نشده
command.Connection = aaa;
این خط رو اضافه کن....
{0} و {1} و ... برای خوانایی بیشتره... فرمت بندی اسسترینگ...

string sql = "INSERT INTO engineers(Engineer_File_NO, Engineer_Base,Engineer_Field,Engineer_Name,Enginee r_Family,Engineer_Phone, Engineer_BankAccount)" +
" values ({0},{1},'{2}','{3}','{4}',{5},{6})";

sql = string.Format(sql,
Engineer_File_NO, Engineer_Base, Engineer_Field, Engineer_Name, Engineer_Family, Engineer_Phone, Engineer_BankAccount);


این دو تا خط در کل اینکار رو می کنه برات .... مقدار Engineer_File_NO رو میزاره جای {0} و .....

afi_program
سه شنبه 06 مرداد 1394, 11:42 صبح
ازتون خیلی ممنونم، ولی هنوز مشکل پابرجاست. داده اضافه شده توی گریدویو نشون داده میشه ولی وقتی برنامه بسته میشه و دوباره باز میشه نیستش!!
اصن توی دیتابیس اعمال نمیشه :گریه::اشتباه:

دلتنگ اسمان
سه شنبه 06 مرداد 1394, 12:18 عصر
کل کدهایی رو که بعد از اصلاح برای ثبت اجرا میکنین رو اینجابذارین و همچنین تصویری از دیتابیس و جدولتون رو هم قرار بدین.

afi_program
سه شنبه 06 مرداد 1394, 12:30 عصر
کل کدی که اجرا میشه بعد از زدن یک دکمه است:
OleDbConnection aaa = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Office_Assistant.accdb");
OleDbCommand command = new OleDbCommand();
command.Connection = aaa;
int Engineer_File_NO = 5;
int Engineer_Base = 5;
string Engineer_Field = "aa";
string Engineer_Name = "qqqq";
string Engineer_Family = "qqqqq";
int Engineer_Phone = 9;
int Engineer_BankAccount = 9;

string sql = "INSERT INTO engineers(Engineer_File_NO, Engineer_Base,Engineer_Field,Engineer_Name,Enginee r_Family,Engineer_Phone, Engineer_BankAccount)" +
" values ({0},{1},'{2}','{3}','{4}',{5},{6})";

sql = string.Format(sql,
Engineer_File_NO, Engineer_Base, Engineer_Field, Engineer_Name, Engineer_Family, Engineer_Phone, Engineer_BankAccount);

command.CommandText = sql;

aaa.Open();
command.ExecuteNonQuery();
aaa.Close();
این تغییرات بعد از یک بار زدن دکمه ی دیگه توی گریدویو نشون داده میشن. ولی روی دیتا بیس اعمال نمیشن.
کد کلید دوم:
OleDbConnection aaa = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Office_Assistant.accdb");
aaa.Open();
string query = "select * from Engineers";
OleDbCommand command = new OleDbCommand();
command.CommandText = query;
command.Connection = aaa;
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = command;
DataTable objDataTable = new DataTable();
adapter.Fill(objDataTable);
aaa.Close();
dataGridView1.DataSource = objDataTable;

اینم عکس دیتابیس:
133637

دلتنگ اسمان
سه شنبه 06 مرداد 1394, 13:03 عصر
یعنی شما فقط این کد رو اجرا میکنی چیزی در دیتابیس ذخیره نمیشه؟ و خطایی هم نشون نمیده؟

OleDbConnection aaa = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=|DataDirectory|\\Office_Assistant.accdb");
OleDbCommand command = new OleDbCommand();
command.Connection = aaa;
int Engineer_File_NO = 5;
int Engineer_Base = 5;
string Engineer_Field = "aa";
string Engineer_Name = "qqqq";
string Engineer_Family = "qqqqq";
int Engineer_Phone = 9;
int Engineer_BankAccount = 9;

string sql = "INSERT INTO engineers(Engineer_File_NO, Engineer_Base,Engineer_Field,Engineer_Name,Enginee r_Family,Engineer_Phone, Engineer_BankAccount)" +
" values ({0},{1},'{2}','{3}','{4}',{5},{6})";

sql = string.Format(sql,
Engineer_File_NO, Engineer_Base, Engineer_Field, Engineer_Name, Engineer_Family, Engineer_Phone, Engineer_BankAccount);

command.CommandText = sql;

aaa.Open();
command.ExecuteNonQuery();
aaa.Close();



در ضمن تصویر تعریف جدول را بذارین نه دیتای جدول. اون قسمتی که جدول رو تعریف میکنین و نوع ستونها رو مشخص میکنین.

afi_program
سه شنبه 06 مرداد 1394, 15:11 عصر
دقیقا عین کدی که اجرا میکنم را گذاشتم. هیچ کار دیگه ای هم نمیکنم. ولی دیتابیس تغییر نمیکنه!!!!!!!!!!
واقعا گیج شدم. از شما هم بسیار متشکرم که دارید وقت میگذارید
اینم عکس دیتابیس:
133641

afi_program
سه شنبه 06 مرداد 1394, 18:46 عصر
فهمیدم مشکل چی بود.
مشکل از کانکشن استرینگ بود. دیتابیس یه جای دیگه بود ولی وقتی برنامه اجرا میشد یه کپی ازش میساخت و تغییرات رو اون اعمال میشد. وقتی هم برنامه دوباره اجرا میشد دوباره کپی ساخته میشد، که تغییراتی توش اعمال نشده بود.
برای رفعش یه مسیر فیکس دادم برای دیتابیس. اگه راه دیگه میدونید یا راهی برای حل اون مشکل اول خوشحال میشم و قدر دان خواهم بود

بازم بسیار ممنون از کمکتون دوستان.