PDA

View Full Version : مشكل در ذخيره كردن اطلاعات در ديتا بيس اكسس



debugger
شنبه 22 فروردین 1388, 12:48 عصر
دوستان من يه برنامه نوشتم كه ديتا بيسش اكسس هست ولي نمي دونم چرا نمي تونم درج كنم



using System.Data;

using System.Data.OleDb;
اين كد ها را در قسمت

public

partialclassmain : Form




OleDbConnection my_cn = newOleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = |DataDirectory|\\DB.mdb; Persist Security Info = True");
OleDbDataAdapter da;
DataSet ds = newDataSet();
DataView dv = newDataView();



اين كد ها را هم در قسمت فرم لود نوشتم




my_cn.Open();
da = newOleDbDataAdapter("select * from Table1", my_cn);
da.Fill(ds, "Table1");
dv.Table = ds.Tables["Table1"];



ديتا بيس در كنار فايل اجرايي قرار دارد و داراي چهار فيلد مي باشد . كه اسم اونا url , user , password , email هست. اسم تيبل هم table1 هست.


اين كد ها را هم در درون دكمه add نوشتم




OleDbCommand cm = newOleDbCommand();
cm.CommandText = "insert into Table1(URL,USER,PASSWORD,EMAIL) values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
cm.Connection = my_cn;
cm.ExecuteNonQuery();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";


وقتي كه مقادير textbox ها را وارد مي كنم . و روي add كليك مي كنم با ارور زير مواجه ميشوم . لطفا راهنمايي كنيد كه اشكال كار از كجاست.


http://y4shar.parsaspace.com/barnamenevis/khata.jpg

l7i7l7
شنبه 22 فروردین 1388, 17:34 عصر
سلام دوست عزيز كد هاي زير رو امتحان كن






private void SetBindings(DataSet ds)
{
bsCategories.DataSource = ds;
bsCategories.DataMember = "Table1";
bsCategories.ResetBindings(false);
}



private ADODB.Connection CreateConnection()
{
string dsStr;
string dsCn;
ADODB.Connection cn;

cn = new ADODB.Connection();
dsStr = "F:\\myProject\\DataBase\\DB1.mdb";
dsCn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dsStr + ";";
cn.ConnectionString = dsCn;

return cn;
}
private void btnOpen_Click(object sender, EventArgs e)
{
ADODB.Recordset rs;
ADODB.Connection cnADO;
OleDbDataAdapter daTemp;

rs = new ADODB.Recordset();
cnADO = CreateConnection();
daTemp = new OleDbDataAdapter();

cnADO.Open("", "", "", 0);
rs.Open("SELECT * FROM Table1", cnADO,
ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 0);
daTemp.Fill(dsCategories.Table1, rs);

cnADO.Close();

SetBindings(dsCategories);
}واسه ذخيره كردن


private void btnUpdate_Click(object sender, EventArgs e)
{
ADODB.Recordset rsADO;
ADODB.Connection cnADO;

rsADO = new ADODB.Recordset();
cnADO = CreateConnection();

cnADO.Open("", "", "", 0);

rsADO.ActiveConnection = cnADO;
rsADO.Open("Select * From Table1", cnADO,
ADODB.CursorTypeEnum.adOpenDynamic,
ADODB.LockTypeEnum.adLockOptimistic, 0);

rsADO.AddNew(Type.Missing, Type.Missing);
rsADO.Fields["FirstName"].Value = "Test";
rsADO.Fields["LastName"].Value = "Description";
rsADO.Update(Type.Missing, Type.Missing);

MessageBox.Show("Finished", "DataBase Update");

rsADO.Delete(ADODB.AffectEnum.adAffectCurrent);
rsADO.Close();
cnADO.Close();
}

debugger
شنبه 22 فروردین 1388, 18:50 عصر
دوست عزيز ممنون از پاسخ شما

ولي كد هايي كه من نوشتم هم بايد درست كار كنند . چون از لحاظ منطقي هيچ مشكلي وجود نداره . ميخوام اشكال كار را پيدا كنم

لطفا دوستان راهنمايي بيشتري بكنند . ممنونم

debugger
یک شنبه 23 فروردین 1388, 11:59 صبح
دوستان من كد ها را عوض كردم و بدين صورت هم نوشتم

در قسمت

public partial class main : Form




string strSql;
string strCon;
DataSet ds = new DataSet();
OleDbConnection Con = new OleDbConnection();
OleDbDataAdapter da = new OleDbDataAdapter();
DataRow newRow;
OleDbCommandBuilder cb = new OleDbCommandBuilder();



در فرم لود




private void main_Load(object sender, EventArgs e)
{
strCon = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = |DataDirectory|\\DB.mdb; Persist Security Info = True";
strSql = "Select * from Table1";
Con = new OleDbConnection(strCon);
Con.Open();
da = new OleDbDataAdapter(strSql, Con);
da.Fill(ds, "Table1");
}


در داخل دكمه add كد هاي زير را نوشتم




newRow = ds.Tables["Table1"].NewRow();
newRow["Url"] = textBox1.Text.ToString();
newRow["User"] = textBox2.Text.ToString();
newRow["Password"] = textBox3.Text.ToString();
newRow["Email"] = textBox4.Text.ToString();
ds.Tables["Table1"].Rows.Add(newRow);
cb = new OleDbCommandBuilder(da);
da.InsertCommand = cb.GetInsertCommand();
da.Update(ds, "Table1");
Con.Close();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";



حال موقع اجرا كردن با ارور زير مواجه ميشوم

http://y4shar.parsaspace.com/barnamenevis/khata2.jpg

دوستان عزيز لطفا كمك كنيد اين ارور داره روي مغز من راه ميره

rezatati
یک شنبه 23 فروردین 1388, 13:54 عصر
عزیز جون نام فیلد User از کلمات رزرو شده تو Access هستش اونو عوض کن کارت راه می افته می تونی بری تو Help Access و نگاه کنی ببینی که کدو یکی از سایر فیلدهات اسمش از کلمات رزرو شده هستش اگه بود اونارو هم عوض کن برای دیدن کلمات رزرو شده برو تو راهنمای Accessو عبارت reserved رو جستجو کن همشو میاره من خودم هم یه مدت گیر این ارور افتاده بودم باز هم مشکلی بود در خدمتم

debugger
یک شنبه 23 فروردین 1388, 14:38 عصر
من اسم فيلد ها را تغيير دادم




private void button1_Click(object sender, EventArgs e)
{
newRow = ds.Tables["Table1"].NewRow();
newRow["SiteURL"] = textBox1.Text.ToString();
newRow["UserName"] = textBox2.Text.ToString();
newRow["Password"] = textBox3.Text.ToString();
newRow["EmailAddress"] = textBox4.Text.ToString();
ds.Tables["Table1"].Rows.Add(newRow);
cb = new OleDbCommandBuilder(da);
da.InsertCommand = cb.GetInsertCommand();
da.Update(ds, "Table1");
Con.Close();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
}


ولي مشكل همچنان بر جاست

من فكر مي كنم VS2008 با Access مشكل اساسي دارد. شما خودتون از همين كد هاي من استفاده كنيد و با اكسس هم جدول را بسازيد . ببينيد اصلا كار مي كنه يا نه ؟؟؟؟

ASKaffash
یک شنبه 23 فروردین 1388, 16:51 عصر
سلام
شما هنگام ارسال دستور به Access همه فیلدها را رشته ای وارد کرده اید!
لطفا ساختار جدول Table1 را قرار دهید

rezatati
یک شنبه 23 فروردین 1388, 18:01 عصر
عزیز جون مگه من نگفتم که تمامی نام فیلدهاتو چک کن باز هم که فیلد Password یک کلمه رزرو شده است بابا جون اسم فیلدهاتو فارسی بنویس مثلا به جای این اسم بنویس Ramz مجبور نیستی که انگلیسی انتخاب کنی در ضمن خودت هم می تونی از طریق راهنمای اکسس چک کنی که اسم فیلد تو لیست کلمات رزرو شده هستش یا نه اگه همه فیلدهات اسمشون تو لیست کلمات رزرو شده نبود اون وقت برنامه رو دوباره امتحان کن من مطمئن هستم به خاطر این هستش که تو به این ارور بر می خوری

rezatati
یک شنبه 23 فروردین 1388, 22:03 عصر
مشکلتون درست شد

debugger
دوشنبه 24 فروردین 1388, 14:51 عصر
عزیز جون مگه من نگفتم که تمامی نام فیلدهاتو چک کن باز هم که فیلد Password یک کلمه رزرو شده است بابا جون اسم فیلدهاتو فارسی بنویس مثلا به جای این اسم بنویس Ramz مجبور نیستی که انگلیسی انتخاب کنی در ضمن خودت هم می تونی از طریق راهنمای اکسس چک کنی که اسم فیلد تو لیست کلمات رزرو شده هستش یا نه اگه همه فیلدهات اسمشون تو لیست کلمات رزرو شده نبود اون وقت برنامه رو دوباره امتحان کن من مطمئن هستم به خاطر این هستش که تو به این ارور بر می خوری

درسته عزيز . حق با شما بود . بالاخره اين مشكل حل شد

از شما و تمامي دوستان نهايت تشكر را دارم

MAHDI_DEVS
سه شنبه 25 فروردین 1388, 10:41 صبح
آقا یکی هم من را راهنمایی کنه.من در ایتصال به بانک و حذف و اضافه و جستجو و فبلتر مشکل دارم لطفا یه مثال کامل دراین باره به من بفرستید وایمیل من MAHDIhp.devsc@gmail.com متشکر می شم.