PDA

View Full Version : سوال: آپديت كردن ديتابيس بصورت خودكار



m.developer
چهارشنبه 18 فروردین 1389, 13:27 عصر
سلام
مي ميخواهم به محض اينكه كاربري تغييري در ديتابيس داد (مثلا يك رديف به يك جدول توسط يه كاربر اضافه شد) جدول براي تمام بازديد كنندگان بروز بشه (بدون رفرش كردن توسط خود كاربر)
اين موضوع رو سرچ كرم اما جواب خوبي پيدا نكردم
(با c# و 2005 sql)

اوبالیت به بو
چهارشنبه 18 فروردین 1389, 13:54 عصر
باید یه Select بزنید.

smm2006sh
چهارشنبه 18 فروردین 1389, 14:43 عصر
شما وقتی به بانک اطلاعاتی اتصال برقرار کردید و رکورد مورد نظرتون را وارد کردید اطلاعات توی بانک اطلاعاتی وارد میشه و این یعنی اینکه اطلاعات تو بانک وجود داره و شما و هر کس دیگه می تونید اطلاعات به روز را ببینند

m.developer
چهارشنبه 18 فروردین 1389, 20:32 عصر
لطفا واضح تر توضيح بدين
اگه با يه مثال بگين ممنون ميشم
چون واقعا اينو لازم دارم

m.developer
جمعه 20 فروردین 1389, 15:15 عصر
درسته اطلاعات در بانك ذخيره ميشه اما نياز به execute در بانك داريم وقتي برنامه در حال اجراست. اينكارو چطور بايد انجام بدم ؟
در غير اينصورت بايد از برنامه خارج بشم و بعد از ورود دوباره به برنامه تغييرات رو ببينم.
لطفا راهنمايي كنين

meri_rad
شنبه 21 فروردین 1389, 15:35 عصر
اينو امتحان كن


//**************************Refresh grid view****************************
SqlConnection connection2 = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\Database.mdf;Integrated Security=True;User Instance=True");
string query1 = "select * from table1 ";
SqlCommand com1 = new SqlCommand(query1, connection2);
SqlDataAdapter adapter1 = new SqlDataAdapter(com1);
DataSet data1 = new DataSet();
adapter1.Fill(data1);
GridView2.DataSource = data1;
GridView2.DataBind();

behnam25214
شنبه 21 فروردین 1389, 16:40 عصر
یه تابع بساز با هر نامی که خواستی و توش کدهای نمایش رو بنویس Select .و بعدش بعد از اضافه کردن رکوردآخرش تابع رو فراخوانی کن.

m.developer
شنبه 21 فروردین 1389, 19:37 عصر
كسي نميتونه با يه نمونه كد راهنماييم كنه
چون واقعا لازمش دارم
ممنون ميشم

behnam25214
شنبه 21 فروردین 1389, 20:48 عصر
البته این کد واسه آپدیته یکمی تغییرش بدی اضافه کردن رو مینویسی.



private void buttonX1_Click(object sender, EventArgs e)
{
int d = Convert.ToInt32(d1);
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider = Microsoft.Jet.Oledb.4.0;Data Source=" + Environment.CurrentDirectory + "\\SuperMarket.Mdb";

Ssql = "Update Customer Set FirstName='" + textBox2.Text + "',LastName='" + textBox3.Text + "',Email='" + textBox4.Text + "',HomePhone=" + textBox5.Text + ",MobilePhone=" + textBox6.Text + ",Address='" + textBox7.Text + "',ZIPPostalCode=" + textBox8.Text + " Where id=" + d1 + "";

OleDbDataAdapter da = new OleDbDataAdapter(Ssql,con);
OleDbCommand cmupdate = new OleDbCommand(Ssql,con);
con.Open();
cmupdate.ExecuteNonQuery();
con.Close();
DataSet ds = new DataSet();
da.Fill(ds, "Customer");

show();

}


اینم تابع شو واسه بروز رسانی Gride View




private void show()
{
try
{
dataGridView1.DataBindings.Clear();
OleDbConnection Con = new OleDbConnection();
Con.ConnectionString = "Provider = Microsoft.Jet.Oledb.4.0;Data Source=" + Environment.CurrentDirectory + "\\SuperMarket.Mdb";
Con.Open();
Ssql = "Select * From Customer";
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(Ssql, Con);
da.Fill(ds, "Customer");
dataGridView1.DataBindings.Add(new Binding("DataSource", ds, "Customer"));
Con.Close();
}
catch { }
}

m.developer
شنبه 21 فروردین 1389, 21:05 عصر
ممنون از راهنمايي شما دوست عزيز
اما من در يكي از صفحات فرم در بانك يك فيلد رو اضافه مي كنم و در فرم ديگر همين فيلد رو از Combo box مي خونم
اما مشكل اينجاست كه وقتي برنامه در حال اجراست و من اين فيلد رو اضافه مي كنم و همون موقع فرمي كه combo در اون قرار داره رو باز مي كنم اين فيلد اضافه نميشه و بايد از برنامه خارج شم و دوباره وارد شم
چطور اين مشكلو حل كنم؟چطور بانك رو در حال اجرا execute ميشه كرد؟
اگه ممكنه(با C# , sql 2005)

rasool_mrd
یک شنبه 22 فروردین 1389, 10:46 صبح
سلام دوست عزیز
منم همین مشکل رو داشتم
وقتی رو فرم دو بار کلیک می کنی تابع مربوط به form load باز می شه اونجا باید یه تیکه کد مثل زیر ببینی
this.callsTableAdapter.Fill(this.phbookDataSet1.ca lls);
اونو کپی کن و هر جا خواستی datagridview رو refresh کنی این کد رو بنویس
موفق باشی

behiunforgiven
یک شنبه 22 فروردین 1389, 11:04 صبح
ممنون از راهنمايي شما دوست عزيز
اما من در يكي از صفحات فرم در بانك يك فيلد رو اضافه مي كنم و در فرم ديگر همين فيلد رو از Combo box مي خونم
اما مشكل اينجاست كه وقتي برنامه در حال اجراست و من اين فيلد رو اضافه مي كنم و همون موقع فرمي كه combo در اون قرار داره رو باز مي كنم اين فيلد اضافه نميشه و بايد از برنامه خارج شم و دوباره وارد شم
چطور اين مشكلو حل كنم؟چطور بانك رو در حال اجرا execute ميشه كرد؟
اگه ممكنه(با C#‎ , sql 2005)


دوست عزیز مشکلت حل شد؟

منم همین مشکل رو دارم.

اگه حل شد لطف کن راهنمایی کن.

مرسی.

اَرژنگ
یک شنبه 22 فروردین 1389, 11:31 صبح
سلام
مي ميخواهم به محض اينكه كاربري تغييري در ديتابيس داد (مثلا يك رديف به يك جدول توسط يه كاربر اضافه شد) جدول براي تمام بازديد كنندگان بروز بشه (بدون رفرش كردن توسط خود كاربر)
اين موضوع رو سرچ كرم اما جواب خوبي پيدا نكردم
(با C#‎ و 2005 sql)
قابلیت انجام اینکار در شبکه و برایه بیشتر از یک کاربر کار پیچیده‌‌ای است ، روش ساده‌ای که با کد بشه پیشنهاد داد وجود ندارد، و در عمل هم معمولاً پیاده‌ریزی نمیشه (حتی سیستم ERP مال مایکراسافت این قابلیت را نداره، کاربر دیگر قبل از ویرایش داده هایی که توسط یک کاربر دیگر در مابین زمان گرفته شدن و اراعه دادن ویرایشاتش باید رکورد را دوباره از داتابیس بگیرد.).
به جایه حل این مشکل به مبحث pessimistic / oprimistic locking نگاه برایه جلوگیری از تغییر داده‌ها به توسط یک کاربر دیگر بندازید.

اَرژنگ
یک شنبه 22 فروردین 1389, 11:34 صبح
ممنون از راهنمايي شما دوست عزيز
اما من در يكي از صفحات فرم در بانك يك فيلد رو اضافه مي كنم و در فرم ديگر همين فيلد رو از Combo box مي خونم
اما مشكل اينجاست كه وقتي برنامه در حال اجراست و من اين فيلد رو اضافه مي كنم و همون موقع فرمي كه combo در اون قرار داره رو باز مي كنم اين فيلد اضافه نميشه و بايد از برنامه خارج شم و دوباره وارد شم
چطور اين مشكلو حل كنم؟چطور بانك رو در حال اجرا execute ميشه كرد؟
اگه ممكنه(با C#‎‎ , sql 2005)
کی کمبو باکس را پر میکنید؟
قبل از اینکه فرم را باز کنید را و یا در زمان DropDown event کمبو باکس را پرش کنید، به این شکل مشکلتا حل میشه.

m.developer
یک شنبه 22 فروردین 1389, 16:18 عصر
combo box به بانك اتصال داره و فيلد مثلا نام رو نشون ميده
اما وقتي در فرم نام جديد وارد مي كنم و به فرمي كه combo اونجاست ميرم نام اضافه نشده
و بايد حتما از برنامه خارج شم و بعد از ورود دوباره تغييرات رو ببينم
واسه رفعش چيكار كنم؟

اَرژنگ
یک شنبه 22 فروردین 1389, 16:28 عصر
combo box به بانك اتصال داره و فيلد مثلا نام رو نشون ميده
اما وقتي در فرم نام جديد وارد مي كنم و به فرمي كه combo اونجاست ميرم نام اضافه نشده
و بايد حتما از برنامه خارج شم و بعد از ورود دوباره تغييرات رو ببينم
واسه رفعش چيكار كنم؟
با چه روشی به داتابیس وصله؟ لطفاً یکمی کد ، توضیح.

m.developer
یک شنبه 22 فروردین 1389, 16:49 عصر
در فرمي كه كمبو در اونجا قرار داره در فرم لود اين كد رو نوشتم و كمبو رو به بانك اتصال دادم


string cnStr = "Data Source=.\\sqlexpress;Initial Catalog=SMSDB;Integrated Security=True";
SqlConnection obj = new SqlConnection();
obj.ConnectionString = cnStr;
DataSet ds = new DataSet();
SqlDataAdapter dp = new SqlDataAdapter();
dp.SelectCommand = new SqlCommand();
dp.SelectCommand.Connection = obj;
dp.SelectCommand.CommandText = "SELECT TypeName FROM Type";
obj.Open();
dp.Fill(ds, "Type");
obj.Close();
CmbTypeS.DataSource = ds;
CmbTypeS.DisplayMember = "Type.TypeName";



در فرم ورود هم كه اطلاعات رو وارد كردم از جمله اين فيلدي كه در كمبو select كردم
اما وقتي در زمان اجرا فيلد رو وارد مي كنم در كمبوي اين فرم نشون نميده

اَرژنگ
یک شنبه 22 فروردین 1389, 17:07 عصر
در فرمي كه كمبو در اونجا قرار داره در فرم لود اين كد رو نوشتم و كمبو رو به بانك اتصال دادم


string cnStr = "Data Source=.\\sqlexpress;Initial Catalog=SMSDB;Integrated Security=True";
SqlConnection obj = new SqlConnection();
obj.ConnectionString = cnStr;
DataSet ds = new DataSet();
SqlDataAdapter dp = new SqlDataAdapter();
dp.SelectCommand = new SqlCommand();
dp.SelectCommand.Connection = obj;
dp.SelectCommand.CommandText = "SELECT TypeName FROM Type";
obj.Open();
dp.Fill(ds, "Type");
obj.Close();
CmbTypeS.DataSource = ds;
CmbTypeS.DisplayMember = "Type.TypeName";



در فرم ورود هم كه اطلاعات رو وارد كردم از جمله اين فيلدي كه در كمبو select كردم
اما وقتي در زمان اجرا فيلد رو وارد مي كنم در كمبوي اين فرم نشون نميده


بنا بر این چیزی که میگید، اگر فرمی که کمبو باکس داخلش هست را ببندید و باز کنید ( یا اینکه بعد از اینکه مقادیر به داتابیس وارد شد بازش کنید) باید مقادیر وارد شده رو هم نشان بده.
از روشهایی مانند استاتیک برایه نشان دادن فرم استفاده میکنید؟ کدی که فرمی که کمبو باکس داخلش قرار دارد را برایه نشان دادن استفاده میکنید را بفرستید.

mohsen_metn
یک شنبه 22 فروردین 1389, 17:53 عصر
سلام
میتونی از تایمر استفاده کنی

m.developer
یک شنبه 22 فروردین 1389, 19:29 عصر
ميشه بيشتر توضيح بدين؟
ممنون ميشم
آخه خيلي از برنامه ها اين حالت رو دارن اما چرا هيچ جوابي واسه اين مشكل كسي نميده!

FastCode
یک شنبه 22 فروردین 1389, 20:49 عصر
قابلیت انجام اینکار در شبکه و برایه بیشتر از یک کاربر کار پیچیده‌‌ای است ، روش ساده‌ای که با کد بشه پیشنهاد داد وجود ندارد، و در عمل هم معمولاً پیاده‌ریزی نمیشه (حتی سیستم ERP مال مایکراسافت این قابلیت را نداره، کاربر دیگر قبل از ویرایش داده هایی که توسط یک کاربر دیگر در مابین زمان گرفته شدن و اراعه دادن ویرایشاتش باید رکورد را دوباره از داتابیس بگیرد.).
به جایه حل این مشکل به مبحث pessimistic- / optimistic- locking نگاه برایه جلوگیری از تغییر داده‌ها توسط یک کاربر دیگر بندازید.
میشه.
من این کار رو انجام دادم.بیشتر از 6 ماه روش کار کردم.و سرعت و دقت فوق العاده ای داره.(استفاده ازUser Defined Transaction)
و باید بگم که متاسفانه اگر کدش(+30MB) رو بهتون بدم نمیتونید استفاده کنید چون با دیتاست طراحی نشده و زیادی OO هست. و قابلیت نوشتن کد hacky(عشق بچه های تالار) رو نداره.
فقط خواستم بگم که میشه ولی خیلی سخته.
من برای هر جدول از 5 تا class و کلی Interface استفاده میکنم.(که حداقل تعداد ممکن برای این کار هست.حداکثر هم نداره.)
به طور مثال
CustomerRow//برای ذخیره اطلاعات client-only
CustomerHost//برای اجرا دستورات در سرور server-only
CustomerEditEventArgs//برای تبادل اطلاعات shared
CustomerDeleteEventArgs//برای تبادل اطلاعات shared
CustomerInsertEventArgs//برای تبادل اطلاعات shared
فقط یک وقت نوشتنش به صورت دستی توی ذهنتون جرقه نزنه(من از روز اول یک code-generator طراحی کردم و 6 ماه طول کشید.و برای من هر تیبل با 5 تا فیلد~=5000خط کد)
اگر میخواهید چنین چیزی طراحی کنید به این چند تا requirement دقت کنید:

کد اس کیو ال Support کنه*
یک به یک - یک به n - n به n رو Support کنه**
سریع باشه.
بتونه Cloud باشه
cross-database باشه*
نیاز به Client-Configuration نداشته باشه*
تحت وب کار کنه.
ترافیکش پایین باشه.
سطح دسترسی داشته باشه.
log داشته باشه.
رمزگزاری های Public-Key/Private-Key رو ساپورت کنه.*
قابلیت داشتن Integrated BLL با استفاده از کلاسهای partial متود های partial اینترفیس ها و ...**
...
ستاره دار ها مهم هستند.
من فقط همین ها رو میدونم(http://en.wikipedia.org/wiki/Phosphorus تموم کردم.)

من اسمش رو گزاشتم:RealTime Server-Side DAL
هنوز اسمش رو ثبت نکردم.(چی گفتم توی ایران مهد کپیرایت)

ببخشید اگر طولانی شد و یا خیلی تعریف از خود بود.
معذرت میخوام.

اَرژنگ
دوشنبه 23 فروردین 1389, 04:01 صبح
ميشه بيشتر توضيح بدين؟
ممنون ميشم
آخه خيلي از برنامه ها اين حالت رو دارن اما چرا هيچ جوابي واسه اين مشكل كسي نميده!
"این مشکل" معنی نمیده، کدام مشکل؟
کدی که برایه پر کردن کمبو باکس فرستاده بودید از لحاض کاری اشکلای ندارد (ولی میشه از اینی که هست خیلی بهتر باشد)، ولی "مشکل" اصلی شما به نظر میرسد اینه که کی این کد صدا زده میشه.
همانطوری که در پست قبلی گفتم، بنابر کدی که فرستادید هر بار که فرم باز میشه، باید جدیدترین مقادیر را نشان بده.
پس تنها چیزی که میماند اینه که این کد کی صدا زده میشه، برایه جواب به این "مشکل" باید اینکه فرم را چطوری لود میکنید را ببینید.

یا هم هر بار که کمبو باکس دروپ‌داون میشه پاکش کنید و دوباره از داتابیس پرش کنید.

m.developer
دوشنبه 23 فروردین 1389, 06:38 صبح
من اين كد رو در لود فرم نوشتم و فرم ورود روي اين فرم باز ميشه و وقتي فرم ورود رو ميبندم در كمبو مقادير اضافه شده رو نشون نميده واسه همين كد رو در event هاي مختلف كمبو هم امتحان كردم اما جواب نداد بايد يه بار فرم كمبو رو ببندم و دوباره باز كنم اما خوب اينجوري كه اصلا جالب نيست!:ناراحت:

اَرژنگ
دوشنبه 23 فروردین 1389, 06:51 صبح
من اين كد رو در لود فرم نوشتم و فرم ورود روي اين فرم باز ميشه و وقتي فرم ورود رو ميبندم در كمبو مقادير اضافه شده رو نشون نميده واسه همين كد رو در event هاي مختلف كمبو هم امتحان كردم اما جواب نداد بايد يه بار فرم كمبو رو ببندم و دوباره باز كنم اما خوب اينجوري كه اصلا جالب نيست!:ناراحت:

من با توضیحاتتان بیشتر گیج شدم،:لبخند:
اگر ممکن است این ۲ تا فرم را بفرستید، یا هم اینکه اگر پروژه کوچیک است بفرستید، احتیاجی به فرستادن داتابیس نیست، فقط کد را ببینیم بسه.

از لحاظ منطقی ، اگر فرم را دیباگ کنید باید ببینید که متد زمان لودشدن هر بار که فرم باز میشه باید کال بشه (به شرط اینکه از ورشهایی مانند مخفی کردن و دوباره نشان دادن فرم استفاده نشده باشد).

Yasersadegh
دوشنبه 23 فروردین 1389, 10:42 صبح
سلام به همه دوستان
دوستان من فهميدم مشكل اين دوستمون چيه!!:لبخند::تشویق: دوست عزيز كساني كه تا به اينجا جوابهايي رو به شما دادند همه از اساتيد اين سايت هستند ولي به دليل كامل نبودن توضيحات شما متوجه قضيه نشدند!


از لحاظ منطقی ، اگر فرم را دیباگ کنید باید ببینید که متد زمان لودشدن هر بار که فرم باز میشه باید کال بشه (به شرط اینکه از ورشهایی مانند مخفی کردن و دوباره نشان دادن فرم استفاده نشده باشد).
:گیج:
البته استاد آر‍ژنگ اشاره فرمودند!

من اين كد رو در لود فرم نوشتم و فرم ورود روي اين فرم باز ميشه و وقتي فرم ورود رو ميبندم در كمبو مقادير اضافه شده رو نشون نميده واسه همين كد رو در event هاي مختلف كمبو هم امتحان كردم اما جواب نداد بايد يه بار فرم كمبو رو ببندم و دوباره باز كنم اما خوب اينجوري كه اصلا جالب نيست!:ناراحت:

اما حل مشكل شما دوست عزيز...
ببين وقتي يه كدي در فرم لود قرار بگيره زماني كه فرم برا اولين بار باز بشه اجرا ميشه و يا اگه فرم close بشه و باز بشه اجرا ميشه!! ولي چون شما در هنگام باز بودن فرم يه فرم ديگه باز مي كنيد و اونو مي بنديد ديگه كد رويه فرم لود اجرا نميشه و نتيجه ميشه مشكل شما!!:لبخند: حال شما كد رويه فرم لود رو در رويداد form Activate كپي كن حتما مشكلتون حل ميشه!!:متفکر:

موفق باشيد:چشمک:

m.developer
دوشنبه 23 فروردین 1389, 13:26 عصر
سلام ممنون
اما اين مشكل حل نشد
واسه بهتر مشخص شدن اين مشكل من كد فرم رو ميذارم اما چون پروژه حجمش بالاست من فقط اين دو صفحه كه مشكل داشت و كد اون رو گذاشتم بدون ديتابيس
كد كمبو در فرم لود هست اما من كدشو همون طور كه دوست عزيز گفتن در Form_Activated هم امتحان كردم جواب نداد در event هاي كمبو هم امتحان كردم اما متاسفانه ....:ناراحت:
ممنون ميشم راهنمايي كنين
همين مشكل رو در مورد ديتا گريد هم دارم
46978

اَرژنگ
دوشنبه 23 فروردین 1389, 14:14 عصر
سلام ممنون
اما اين مشكل حل نشد
واسه بهتر مشخص شدن اين مشكل من كد فرم رو ميذارم اما چون پروژه حجمش بالاست من فقط اين دو صفحه كه مشكل داشت و كد اون رو گذاشتم بدون ديتابيس
كد كمبو در فرم لود هست اما من كدشو همون طور كه دوست عزيز گفتن در Form_Activated هم امتحان كردم جواب نداد در event هاي كمبو هم امتحان كردم اما متاسفانه ....:ناراحت:
ممنون ميشم راهنمايي كنين
همين مشكل رو در مورد ديتا گريد هم دارم
46978


برایه بهبود برنامه به این نکات توجه کنید:
۱. به جایه کپی پیست این



string cnStr = "Data Source=.\\sqlexpress;Initial Catalog=SMSDB;Integrated Security=True";


از کانکشن استرینگ در کانفیگوریشن فایل استفاده کنید،

۲. این کد :

i
f (DB.dbConnected(cnStr))
{

DB myDB = new DB();
گنگ است ، کد کلاس را بفرستید.

این کد باید مرتب بشه وگرنه حتی اگر بتونیم به اندازه کافی کج و ماوجش کنیم که بنظر بیاد که کار میکنه در اصل فاجعه است.

اَرژنگ
دوشنبه 23 فروردین 1389, 14:22 عصر
روش ماسمالی: (این مشکلتان را در ظاهر حل میکنه ولی مشکلات اصلی همانطوری حل نشده میمانند):


این کد را

private void BtnNewTp_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
}

private void Form1_Load(object sender, EventArgs e)
{
string cnStr = "Data Source=.\\sqlexpress;Initial Catalog=SMSDB;Integrated Security=True";
SqlConnection obj = new SqlConnection();
obj.ConnectionString = cnStr;
DataSet ds = new DataSet();
SqlDataAdapter dp = new SqlDataAdapter();
dp.SelectCommand = new SqlCommand();
dp.SelectCommand.Connection = obj;
dp.SelectCommand.CommandText = "SELECT TypeName FROM Type";
obj.Open();
dp.Fill(ds, "Type");
obj.Close();
CmbTypeS.DataSource = ds;
CmbTypeS.DisplayMember = "Type.TypeName";

}

با این کد عوض کنید:



private void BtnNewTp_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
ConnectToDatabase();
}

private void Form1_Load(object sender, EventArgs e)
{
ConnectToDatabase();
}

private void ConnectToDatabase()
{

string cnStr = "Data Source=.\\sqlexpress;Initial Catalog=SMSDB;Integrated Security=True";
SqlConnection obj = new SqlConnection();
obj.ConnectionString = cnStr;
DataSet ds = new DataSet();
SqlDataAdapter dp = new SqlDataAdapter();
dp.SelectCommand = new SqlCommand();
dp.SelectCommand.Connection = obj;
dp.SelectCommand.CommandText = "SELECT TypeName FROM Type";
obj.Open();
dp.Fill(ds, "Type");
obj.Close();
CmbTypeS.DataSource = ds;
CmbTypeS.DisplayMember = "Type.TypeName";
}

m.developer
سه شنبه 24 فروردین 1389, 19:16 عصر
سلام
اين كد مربوط به همون كلاس است.
من ميخوام اين كار بهينه باشه چه كار بايد بكنم؟
ممنون از كمكتون
47046

m.developer
سه شنبه 24 فروردین 1389, 19:32 عصر
من كد رو امتحان كردم تغييري ايجاد نشد:ناراحت:

m.developer
سه شنبه 24 فروردین 1389, 19:55 عصر
خواهش مي كنم يكي كمك كنه.آخه اين جور صفحات تو خيلي از برنامه هاي حسابداري هست واسه حلش پس چيكار ميكنن؟؟؟؟؟؟؟

اَرژنگ
سه شنبه 24 فروردین 1389, 22:03 عصر
سلام
اين كد مربوط به همون كلاس است.
من ميخوام اين كار بهينه باشه چه كار بايد بكنم؟
ممنون از كمكتون
47046

۱. از اون کلاس استفاده نکنید! (اگر هم مجبورید که استفاده کنید لاقل یک کد را ۱۰ جایه مختلف کپی پیست نکنید، همان کانکشن استرینگ را در همان کلاس هارد کود میکردید بهتر بود)ولی حداقل با داتاست کار کنید،

مثال ساده ضمیمه شده: (این مثال از DatSet استفاده میکنه ، راه‌هایه جدیدتر Entity Framwork, Linq To Sql ...را برایه کارهایه عملی توصیه میکنم ، این مثال فقط برایه اینه که حداقل پروژه از این سطح کمتر نباید باشد است)

ahrimaneahurai
جمعه 25 تیر 1389, 18:41 عصر
مشکل منم این بود اما یه جا خوندم از query notification باید استفاده شه.
اما خودم نتونستم به کد تبدیلش کنم. وقتی کسی در جدول شما رکوردی اضافه می کنه sql به شما خبر میده و شما می تونی دوباره کمبوباکستو به صورت خودکار پر کنی.

mmd2009
جمعه 29 مرداد 1389, 03:13 صبح
با سلام خدمت اقای اَرژنگ (http://www.barnamenevis.org/forum/member.php?u=13535)

امیدوارم وقت جواب دادن رو داشته باشید.

من یک سوال داشتم اونم اینه که چطوری میشه در معماری 3 لایه ای برای دو جدول کار کرد.

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

من برای دو جدول میام در همین 3 لایه کار ها رو میکنم ولی یک جا خودنم کدجریتور ها میان مثلا برای 3 جدول 9 لایه درست میکنن تو همین سایت بود ؟؟!!! ولی چطور برای لایه کاربری 3 لایه جدا درست شده. اصلا قاطی شده.

کدام روش اصولی تر هستش

با تشکر

اَرژنگ
جمعه 29 مرداد 1389, 04:43 صبح
با سلام خدمت اقای اَرژنگ (http://www.barnamenevis.org/forum/member.php?u=13535)

امیدوارم وقت جواب دادن رو داشته باشید.

من یک سوال داشتم اونم اینه که چطوری میشه در معماری 3 لایه ای برای دو جدول کار کرد.

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

من برای دو جدول میام در همین 3 لایه کار ها رو میکنم ولی یک جا خودنم کدجریتور ها میان مثلا برای 3 جدول 9 لایه درست میکنن تو همین سایت بود ؟؟!!! ولی چطور برای لایه کاربری 3 لایه جدا درست شده. اصلا قاطی شده.

کدام روش اصولی تر هستش

با تشکر



اگر بخواهید به همین مثال یک جدول دیگر اضافه میکنیم که راحت معلوم باشد، یک جدول شماره تلفن اضافه کنیم که اشخاص به شماره تلفنها ربط داشته باشند به کار میاد؟

در معماری ۳ لایه تعداد جدولها مهم نیست، فقط در لایه دال اینکه از کدام جدولها گرفته و یا داده حفظ میشه اهمیت دارد، بقیه برنامه با اشیایه منطقی کار میکنند.
مثلاً میشه یک کلاس دانش‌آموز را از ۲ تا جدول خواند و در ۳ تا جدول ثبط کرد ولی از لایه دال به بالا فقط با کلاس دانش آموز کار میکنند.
اینکه کد جنریتورها بر تعداد جداول لایه درست میکنند درست نیست، ممکنه بر تعداد جدولها کلاس درست کرد و یا بر تعداد کلاسها جدول درست کرد و یا اینکه اصلاً میشه هیچ رابطه‌ای بین تعداد کلاسها و یا جدولها نباشد. اینکه تعداد لایه‌ها برحسب جدولها تغییر میکنه اصلاً منطقی نیست! ممکنه مفهومها را اشتباه درک کرده باشند.

rezamansori
شنبه 30 مرداد 1389, 08:59 صبح
اقا بهترین راه حل اینه که تو یه تایمر کد سلکت رو قرار بدی و تعداد رو تو یه لیبل مخفی بذاری. بعد تو رویداد تکست چینج لیبل بنویسی که آقا دیتا سورس گرید همون دیتا سته که آخرین بار توی تایمر ایجاد شد.
امیدوارم کودشو خودت بتونی بنویسی.

shima2006
چهارشنبه 03 آذر 1389, 18:49 عصر
با سلام خدمت اقای اَرژنگ (http://www.barnamenevis.org/forum/member.php?u=13535)
امیدوارم وقت جواب دادن رو داشته باشید.
من یک سوال داشتم اونم اینه که چطوری میشه در معماری 3 لایه ای برای دو جدول کار کرد.
اون چیزی که شما عرض کردید و واقعا من ازش استفاده کردم برای یک جدول بود.
من برای دو جدول میام در همین 3 لایه کار ها رو میکنم ولی یک جا خودنم کدجریتور ها میان مثلا برای 3 جدول 9 لایه درست میکنن تو همین سایت بود ؟؟!!! ولی چطور برای لایه کاربری 3 لایه جدا درست شده. اصلا قاطی شده.
کدام روش اصولی تر هستش
با تشکر
آقای mmd2009 از بابت این پست مفیدتون متشکرم
میخواستم بدونم آیا شما موفق شدید که در برنامتون از دو یا سه جدول به جای یه جدول استفاده کنید؟
مثالی که گذاشته بودین خیلی ساده و قابل فهم بود ، اگر بتونید اون مثال رو با دو یا سه جدول تکمیل و در اینجا قرار بدین یک دنیا ممنون میشم ازتون....
متشکرم

mmd2009
چهارشنبه 03 آذر 1389, 19:54 عصر
با سلام.

همونطور که دوستمون گفتن اصلا فرقی نداره 1 جدول باشه یا 100 تا.

متاسفانه کنکور دارم و چند وقته وقتمو صرف خوندن کتابهای جامع کردم و چون اصلا برنامه vs رو هم پاکش کردم و نمیتونم مثال اماده کنم تا بعد که انشاالله با توپ پر بیام تو سایت.

shima2006
چهارشنبه 03 آذر 1389, 22:06 عصر
با سلام.
همونطور که دوستمون گفتن اصلا فرقی نداره 1 جدول باشه یا 100 تا.
متاسفانه کنکور دارم و چند وقته وقتمو صرف خوندن کتابهای جامع کردم و چون اصلا برنامه vs رو هم پاکش کردم و نمیتونم مثال اماده کنم تا بعد که انشاالله با توپ پر بیام تو سایت.
متشکرم دوست عزیز

از دوستان کسی نیست که یک مثال بسیار کوچیک از چندلایه نویسی با چند تا جدول در لایه
DAL داشته باشه؟