PDA

نسخه کامل مشاهده نسخه کامل : مشکلاک من با بانک اطلاعاتی (ADO.net)



vorojax
25-11-2009, 00:17
سلام خدمت دوستان عزیز
بنده این 900 اندی صفحه کتاب آقای هاشمیان و چندتا اموزش سی شارپ دیگه خوندم ! ولی نمی دونم چرا کار با این بانک اطلاعاتی رو درست یاد نمی گیرم!

در حال حاضر بنده یک بانک اطلاعاتی رو به یک دیتا گرید متصل کردم دیتا گرید آپدیت می کنم بعد از تغییرات فقط دیتاست اپدیت می شه و بعد از یک رفرش در اتصال دوباره هر چی بود می پره....خلاصه اینکه چطوری تغییرات دیتاست رو انتقال بدم به دیتابیس اصلی؟

(البته چندتا مشکل دیگم دارم! مثلا این اس کی ال کامند بیلدر رو نمی فهم چطور باید استفاد کنم!)

این هم کد هایی که واسه برنامه دیتا گرید نوشتم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vorojax
26-11-2009, 02:07
نیست کسی که یاری نمایید بنده را؟

MTPROG
26-11-2009, 09:01
table1TableAdapter.Fill(tDatabase1DataSet.Table1);
table1TableAdapter.Update(tDatabase1DataSet);


جای این خط کد رو عوض کن
یعنی اینطوری


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

vorojax
27-11-2009, 10:57
سلام و تشکر
توفیقی نداشت!
باز وقتی تو رو بانک اطلاعاتی یه رفرش وصل می شم یا Show data Table رو می زنم اطلاعات داخل بانک اطلاعاتی همون آش و همون کاسه هست!

_H2_
29-11-2009, 11:53
سلام
با اجازه دوست همکار عزیز جناب MTPROG، من هم سعی میکنم یک مطالب کمکی بیان کنم.

=====

چند نکته وجود دارد.
اول آنکه متد Insert خارج از چارت DataGridView یک آیتم اضافه میکند و معمولاً استفاده نمیشود.

بعد چون DataAdapter شما Typed است نیاز به استفاده از SqlCommandBuilder نخواهید داشت.
ولی باز به نمایه طراحی TypedDataSet تان بروید و مطمئن شوید که بخش پایینی DataAdapter همه 4 عدد Command اصلی InserCommand و DeleteCommand و UpdateCommand و SelectCommand اش پر باشد.

در اخر تک دستور زیر برای خواندن از دیتابیس کافی است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و در مقابل تک دستور زیر برای ذخیره محتویات هم کافی است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

ولی همچنان یک نکته ظریف دیگر وجود دارد که لازم است دقت کنید.
این مطلب اصلاً ربطی به ADO.Net ندارد و مربلوط به شرایط کاری و دیباگ خود VS است.
وقتی یک فایل دیتابیس را در پروژه تان در VS اضافه میکنید معمولاً Copy to Output Directory ان روی Copy Always ست میشود.
این تنظیم به این معنی است که هر بار که از داخل VS پروزه کامپایل (و سپس اجرا) میشود خودکار فایل قبلی موجود در دایرکتوری خروجی پاک شود و فایل جدید موجود در پروژه جایگزین آن شود. (و سپس برنامه اجرا شود)

این حالت معمولاً بسیار خوب و مفید است و باعث میشود هر تغییری در دیتابیس (جداول و فیلدها و رویه ها و... و...) اعمال کنید در اجرای بعدی دیده شود.
ولی اگر از ان اطلاع نداشته باشید سردرگمتان خواهد کرد.

یعنی اتفاقی که می افتد آناست که شما برنامه را از داخل VS اجرا میکنید و برخی آیتم ها وارد دیتابیس میکنید ولی در اجرای بعدی از داخل VS کل دایرکتوری قبلی حذف و کامپایل و فایل بانک اطلاعاتی خالی جدید جایگزین آن میشود.

پیشنهاد میکنم یکبار به جای داخل VS با MyComputer به محل پوشه bin محل پروژه بروید و از آنجا دستی فایل exe تان را چند بار اجرا کنید و ببینید تغییرات ذخیره میشود یا نه؟

(
البته با انتخاب فایل در SolutionExplorer میتوانید گزینه مذکور را در پالت Properties تغییر دهید.
ولی گزینه پیشفرض فعلی بد نیست.
)

موفق باشید.

vorojax
30-11-2009, 16:12
سلام دوست عزیز و متشکر از توضیحاتتان....
بنده یک برنامه ساده نشوتم دو سه روز بر روی کامپیوتربنده بود و تمام اطلاعاتی که توسط خود برنامه وارد آن برنامه کرده بودم بود...هر روکوردی که درج کردم بود....
بعد و ارد VS2008 شدم و در خود پروژه به از طریغ کانکشن سمت چپ به بانک متصل شدم و Show data Table رو زدم اطلاعات اولیه دیتابیس که از این طریق وارد کردم بود و هیچ تغییری وارد نشده بود و اطلاعاتی که توسط دیتا گرید و خود برنامه وارد کرده بودم وارد نشده بود.....و یک رفرش کردم....اطلاعات وارد شده به برنامه طی 3 روز پرید...و در خود دیتاگرید هم تنها همان چند رکوردی که توسط Show data Table وارد کرده بودم نشون می داد و نه رکوردها که توسط متد اینسرت وارد کرده بودم....
مشکل کجاست؟

_H2_
01-12-2009, 11:52
سلام
فقط در یک شرایط اطلاعات شما در VS خودکار و بدون فرمان مستقیم شما پاک میشود.
(که آن هم در دیتابیسهای SQLServer با حالت Attach شده مصداق ندارد.)


ولی همچنان یک نکته ظریف دیگر وجود دارد که لازم است دقت کنید.
این مطلب اصلاً ربطی به ADO.Net ندارد و مربلوط به شرایط کاری و دیباگ خود VS است.
وقتی یک فایل دیتابیس را در پروژه تان در VS اضافه میکنید معمولاً Copy to Output Directory ان روی Copy Always ست میشود.
این تنظیم به این معنی است که هر بار که از داخل VS پروزه کامپایل (و سپس اجرا) میشود خودکار فایل قبلی موجود در دایرکتوری خروجی پاک شود و فایل جدید موجود در پروژه جایگزین آن شود. (و سپس برنامه اجرا شود)

این حالت معمولاً بسیار خوب و مفید است و باعث میشود هر تغییری در دیتابیس (جداول و فیلدها و رویه ها و... و...) اعمال کنید در اجرای بعدی دیده شود.
ولی اگر از ان اطلاع نداشته باشید سردرگمتان خواهد کرد.

یعنی اتفاقی که می افتد آناست که شما برنامه را از داخل VS اجرا میکنید و برخی آیتم ها وارد دیتابیس میکنید ولی در اجرای بعدی از داخل VS کل دایرکتوری قبلی حذف و کامپایل و فایل بانک اطلاعاتی خالی جدید جایگزین آن میشود.

پیشنهاد میکنم یکبار به جای داخل VS با MyComputer به محل پوشه bin محل پروژه بروید و از آنجا دستی فایل exe تان را چند بار اجرا کنید و ببینید تغییرات ذخیره میشود یا نه؟

(
البته با انتخاب فایل در SolutionExplorer میتوانید گزینه مذکور را در پالت Properties تغییر دهید.
ولی گزینه پیشفرض فعلی بد نیست.
)

vorojax
05-12-2009, 12:53
سلام
فقط در یک شرایط اطلاعات شما در VS خودکار و بدون فرمان مستقیم شما پاک میشود.
(که آن هم در دیتابیسهای SQLServer با حالت Attach شده مصداق ندارد.)
نقل قول:
نوشته شده توسط _H2_
ولی همچنان یک نکته ظریف دیگر وجود دارد که لازم است دقت کنید.
این مطلب اصلاً ربطی به ADO.Net ندارد و مربلوط به شرایط کاری و دیباگ خود VS است.
وقتی یک فایل دیتابیس را در پروژه تان در VS اضافه میکنید معمولاً Copy to Output Directory ان روی Copy Always ست میشود.
این تنظیم به این معنی است که هر بار که از داخل VS پروزه کامپایل (و سپس اجرا) میشود خودکار فایل قبلی موجود در دایرکتوری خروجی پاک شود و فایل جدید موجود در پروژه جایگزین آن شود. (و سپس برنامه اجرا شود)

این حالت معمولاً بسیار خوب و مفید است و باعث میشود هر تغییری در دیتابیس (جداول و فیلدها و رویه ها و... و...) اعمال کنید در اجرای بعدی دیده شود.
ولی اگر از ان اطلاع نداشته باشید سردرگمتان خواهد کرد.

یعنی اتفاقی که می افتد آناست که شما برنامه را از داخل VS اجرا میکنید و برخی آیتم ها وارد دیتابیس میکنید ولی در اجرای بعدی از داخل VS کل دایرکتوری قبلی حذف و کامپایل و فایل بانک اطلاعاتی خالی جدید جایگزین آن میشود.

پیشنهاد میکنم یکبار به جای داخل VS با MyComputer به محل پوشه bin محل پروژه بروید و از آنجا دستی فایل exe تان را چند بار اجرا کنید و ببینید تغییرات ذخیره میشود یا نه؟

(
البته با انتخاب فایل در SolutionExplorer میتوانید گزینه مذکور را در پالت Properties تغییر دهید.
ولی گزینه پیشفرض فعلی بد نیست.
)
دوست عزیز من چیزی از گفته های شما متوجه نمی شوم ، این برمامه من از بین اجراش می کنم هیچ مشکلی نداره چند روز هم تست کردم در هر بار اجرا اطلاعات بود فقط کافی وصل شم از طریغ خو ویژال استادیو و یک رفرش بدم به بانک اطلاعاتی همه چی می پره...آیا امکانش هست که شما یک برنامه کوچک که فقط یک رکورد اضافه کن بنویسید با دیتابیس به بنده بدهید تا ببینم آیا آن نیز بعد از رفرش کردن اطلاعاتش از بین می رود یا خیر....

_H2_
05-12-2009, 23:31
سلام

آیا امکانش هست که شما یک برنامه کوچک که فقط یک رکورد اضافه کن بنویسید با دیتابیس به بنده بدهید

نمونه از Binding (+رفع مشکل فیلدهای Autonumber در بانک Access در حالت Binding)
support.h02.ir/fwlink/?LinkId=1001498227

نمونه مخلوط از نمایش جدولی با DataTable+DataAdapter ولی درج مستقیم با Command
support.h02.ir/fwlink/?LinkId=1000503617

نمونه نمایش جدول با قابلیت ویرایش در وب سایت با و بدون Ajax:
support.h02.ir/fwlink/?LinkId=1003425737

ذخیره و بازیابی تصاویر داخل دیتابیس:
support.h02.ir/fwlink/?LinkId=1000198547

vorojax
06-12-2009, 21:01
دوست عزیز این ها همه بانک های اطلاعاتیشون SQL server هست درسته؟ چون بنده می خواهم فقط یبا sql server کار کنم...

_H2_
08-12-2009, 10:53
سلام

دوست عزیز این ها همه بانک های اطلاعاتیشون SQL server هست درسته؟ چون بنده می خواهم فقط یبا sql server کار کنم...
نمونه از Binding (+رفع مشکل فیلدهای Autonumber در بانک Access در حالت Binding)
support.h02.ir/fwlink/?LinkId=1001498227

vorojax
14-12-2009, 18:20
دوست عزیز تشکر...
-------
یک سوال دیگر..
اخوی بنده یک تکس رو از خود مشخصاتش نه با کد نویسی وصل کردم به یک تیبل دیتا بایندینگ و اتصال به یک فیلد....
برای ویرایش اون فیلیدی که تکس داخلش هست و ما وقتی تکس رو عوض کردیم بخواهیم فیلد مرتبط با اون هم عوض بشه چه کدی رو باید بنویسیم؟ البته نه تک تک براشون کد بنویسیم یک فرم هست با مقادیر زیادی ورودی که به بانک اطلاعاتی اکسس توسط همین دیتا تیبل بایندینگ وصله...حالا اگر بخوام با یک دکمه تمام تغییرات رو به ثبت برسونم چه باید بکنم؟
با تشکر

_H2_
16-12-2009, 02:00
سلام
اگر شما به درستی از Binding استفاده کرده باشید ...
(مثل همین نمونه ساده support.h02.ir/fwlink/?LinkId=1001498227)

برای خواندن از دیتابیس باید متد DataAdapter.Fill را اجرا کنید.
(مثل متد DBLoad در فرم frmMain همین سورس کد نمونه)

و

برای ذخیره داخل دیتابیس باید متد DataAdapter.Update را اجرا کنید.
(مثل متد DBSave در فرم frmMain همین سورس کد.)

=====

یعنی برای ذخیره باید به وسیله همان نوع TypedDataAdapter که Fill کرده اید اینبار Update کنید.
موفق باشید.

_H2_
16-12-2009, 02:00
سلام
اگر شما به درستی از Binding استفاده کرده باشید ...
(مثل همین نمونه ساده support.h02.ir/fwlink/?LinkId=1001498227)

برای خواندن از دیتابیس باید متد DataAdapter.Fill را اجرا کنید.
(مثل متد DBLoad در فرم frmMain همین سورس کد نمونه)

و

برای ذخیره داخل دیتابیس باید متد DataAdapter.Update را اجرا کنید.
(مثل متد DBSave در فرم frmMain همین سورس کد.)

=====

یعنی برای ذخیره باید به وسیله همان نوع TypedDataAdapter که Fill کرده اید اینبار Update کنید.
موفق باشید.

vorojax
28-12-2009, 12:54
سلام
چندتا فرم هست بنده می خواهم یک متغییری باشه که تو همه فرمها بتونم ازش استفاده کنم و اگر توسط فرمی تغییرش داد متغییر رو تو فرمهایه دیگه هم مقدارش قابل دسترس باشه و تغییر کرده باشه.....آیا امکانش هست؟یا حتما باید از بانک اطاعاتی استفاده کنم...با تشکر
و همچنین نمی دونم چرا نمی تونم عملیاتی رو نوع Memo اکسس تو ویژال استادیو با خود بیندینگ سورس انجام بدم...آیا راهی هست؟

cdcenter
28-12-2009, 13:13
اکر با ADO.NET مشکل دارید از روش ساده تر LINQ استفاده کنید .

vorojax
29-12-2009, 00:56
روش ساده تر LINQ استفاده کنید .
هیچی در بارش نمی دانم! پی دی اف اموزشی چیزی دربارش دارید؟

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

_H2_
30-12-2009, 01:13
سلام


چندتا فرم هست بنده می خواهم یک متغییری باشه که تو همه فرمها بتونم ازش استفاده کنم

دقت کنید که برای ارسال اطلاعات بین بخشهای مختلف نباید از متغیرهای عمومی استفاده کرد و این کار راه حجل شی گرایی خود را دارد ...
مثل دیالوگ های Open و Save و... خود داتنت ... دقت کنید ... شما فرم باز میکنید و مواردی را میتوانید در این فرمها تنظیم کنید و نتایج حاصل انتخاب کاربر را بخوانید ولی متغییر عمومی استفاده نمیکنید !!!


متغیر عمومی برای موارد خیلی خاصی مثل ConnectionString و سایر تنظیمات سرتاسری برنامه کاربرد دارد ...
(که تازه اینها هم با تئوری های سرویس گرایی نیازش مرتفع خواهد شد.)

بحرحال با حصول شرایط منطقی برای داشتن متغیرهای عمومی در سطح برنامه میتوانید یک مثل این کدها عمل کنید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا با ارجاعاتی مثل Module1.Field1 و یا Class1.Field2 میتوانید در سرتاسر برنامه به این متغیرهای عمومی دسترسی داشته باشید.


چرا نمی تونم عملیاتی رو نوع Memo اکسس تو ویژال استادیو با خود بیندینگ سورس انجام بدم...آیا راهی هست؟
نباید مشکلی به وجود آید؟
دقیقاً چه اتفاقی می افتد یا نمی افتند(!)؟
خطا و پیغامی دریافت میکنید؟

vorojax
05-01-2010, 15:48
سلام و تشکر فراوان
شما فکر کنم کد وی بی برای بنده گزاشتی چون بنده shared پیدا نکردم اما جاش یاد استاتیک افتادم و از اون استفاده کردم جواب داد تشکر.
و اما Memo ارور زیر رو در هنگام وارد کردن دیتابیس به ویژوال استادیو می ده(داخل پنجره دیتا سورس کانفیگوریشن ویزارد)


some updating commands could not be generated automatically.The database returned the following error:
Dynamic SQL generation for the updateCommand is not supported against a selectCommand that does not return any key column information

و موقع ذخیره و به روز رسانی اطلاعات نیز ارور زیر رو می ده:


Update requires a valid UpdateCommand when passed DataRow collection with modified rows.


و از کدهای زیر برای آپدیت استفاده می کنم:


private void button1_Click(object sender, EventArgs e)
{
table1BindingSource.SuspendBinding();
table1TableAdapter.Update(new_Microsoft_Office_Acc ess_ApplicationDataSet);
}



و اما مشکل بدی که تو پروژم الان بهش بر خوردم!
از اونجا که تو هی جدول تعداد فیلدهام خیلی بالاست . وقتی اطلاعات رو آپدیت کنم ارور زیر رو می ده


Too many fields defined.

کدهای به روز رسانی نیز اینها هستند:


private void Save_Click(object sender, EventArgs e)
{
bindingSource1.SuspendBinding();
damdariTableAdapter1.Update(_mehre_mdfDataSet1);

}

می خواستم پروژه رو هر چه زودتر به استاد تحویل بدم ولیکن با این مشکل اساسی گیج شدم! نمی دونم باید وقت بزارم دیتابیس رو تیکه تیکه کنم و بعد بایند کنم....
یا انیکه اگه تبدیلش کنم به اس کی ای ، بانک اطلاعتی رو درست میشه؟
متوجه شدم با اس کی ال 2005 میشه اکسس رو تبدیل کرد به اس کی ال 2005 می خواستم برم سی دی های اس کی ال 2005 رو بگیرم ، به این نتیجه رسیدم اول از شما بپرسم....در صورت نبودن راهی برم اینکار رو انجام بدم. البته یک سوال هم برام پیش اومد اس کی ال با تعداد زیاد فیلد تو یه جدول مشکلی نداره؟

_H2_
07-01-2010, 13:09
سلام


شما فکر کنم کد وی بی برای بنده گزاشتی


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید




و اما Memo ارور زیر رو در هنگام وارد کردن دیتابیس به ویژوال استادیو می ده

متن خطای شما حرفی از MEMO نزده!
مشکل شما از دستور SQL-SELECT اولیه و یا کل جدولتان ناشی میشود.

یا جدول بانک اطلاعاتی اصلی شما کلید یا همان primarykey ندارد !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

یا در دستور SQL-SELECT تان فیلد primarykey وجود ندارد.



Too many fields defined

چند تا فیلد دارید؟
از Access چند استفاده میکنید؟

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

مثلا اگر قرار باشد بانک اطلاعاتی نویسنده-کتاب را داشته باشید باید آن را دو جدول کنید.
جدول نویسنده که مشخصات شخصی را شامل میشود و هر نویسنده کدی میگیرد و جدول دوم جدول کتابهای نویسندگاه که کد نویسنده در جدول دوم وجود دارد.

باید روابط یک به چند و چند به چند را به چند جدول بشکنید (مثل هر نویسنده که میتواند بینهایت کتاب داشته باشد)

=====

در یک جدول به صورت معمول نباید فیلدهای خالی زیادی داشته باشید اگر فیلدهای زیادی وجود دارد که فقط برای تعداد کمی از سطرها و موارد این فیلدها پر میشود اینها را میتوانید یک جدول جدا کنید و رابطه یک به یک ایجاد کنید.

و...
و...

=====

راه حل:
- احتمال دارد دیتابیس شما مشکل پیدا کرده باشد.
موتور JET و Access یک محدودیت اسمی 255 تایی دارند (و احتمالاً با کمتر از این تعداد هم به مشکل بر میخورد!) و احتمال ان وجود دارد که فیلدهایی قبلاً داشته اید که حدفشان کرده اید ولی شمارنده تعداد فیلدها کم یا ریست نشده باشد.
بانکتان را با برنامه Access باز کنید و فرمان Compact & Repair را روی ان اجرا کنید.

- قواعد و قوانین نرمال سازی را در ذخیره اطلاعات مد نظر بگیرد و حتماً دیتابیس و بانک اطلاعاتی رابطه ای نرمال شده تهیه کنید.

- دیتابیس را با برنامه Access باز کنید و به نسخه های بالاتر 2003 یا 2007 تبدیل (Convert) کنید.

- کل بانک اطلاعاتی و دیتابیس را به SQL Server منتقل کنید و از این برنامه به جای Access استفاده کنید.
(البته نسخه SQL Server Express همراه VS وجود دارد و نصب هم میشود و همان مشکل شما را رفع میکند و شاید نیازی به خرید CD و برنامه هم نباشد.)

موفق باشید.

vorojax
07-01-2010, 22:07
تشکر دوست عزیز
ولی بنده جدای اینکه تعداد فیلد های پروژم بالا هست و شاید نرمال سازی و غیره ....رعایت نشده باشد
بنده تنها برای تست یک بانک اطلاعتی با یک فیلد ! Memo رو امتحان کردم ! همون هم نشد...ولی اومدم Memo رو کردم تکس اومی شد. و در نتیجه یقین پیدا کردم که مشکل از بانک نیست...و شاید با این کدها نمیشه اپدیتش کرد..
و البته تبدیل کردم ولیکن به صورت attach شده نتونستم استفاده کنم و از خود اس کی ال سرور باید بهش وصل می شدم اگر کپی می کردم می وردمش تو پروژه جواب نمی داد....
و حالا مشکل اصلی بنده این است که با دستو دیتااداپوتور.اپدیت نمی تونم دادهایی رو که می خوام ویرایش کنم ....
برای ویرایش کردن داده ها آن هم به صورت فله ای!!! نه تک تک تو اس کی ال سرور باید چه کدی رو بزنم؟ کد دیتااداپتر.اپدیت برای اکسس جواب می داد و داده هایی که تکس بودن و بایند شده بودن از طریق تکس باکس رو تغییر می داد اما برای اس کی ال ارور می ده....

_H2_
08-01-2010, 10:33
سلام

یک بانک اطلاعتی با یک فیلد ! Memo رو امتحان کردم ! همون هم نشد...ولی اومدم Memo رو کردم تکس اومی شد. و در نتیجه یقین پیدا کردم که مشکل از بانک نیست...و شاید با این کدها نمیشه اپدیتش کرد..
!!!!!!!!!!!!!!!!!!!!!!!!!!
جداول بانک اطلاعاتی شما صد در صد باید فیلد PrimaryKey داشته باشد !!!!!!!!!!!!!!!!!!!!
PrimaryKey فیلدی است که منحصر بفرد است و غیر تکراری است و هر سطر Primarykey خودش را دارد (مثل یک عدد غیر تکراری)
دستورات SQL با تمسک به PrimaryKey که یکتا است تغییرات را اعمال میکنند.

به عنوان نمونه هر نوع Delete و Update ای در جدولی که PrimaryKey نداشته باشد، هیچ تضمینی نخواهد داشت که حتماً سطر مورد نظر شما تغییر کند و یا با دادن دستور چند سطر با هم تغییر نکند.

اگر هم PrimaryKey خاصی ندارید، شما باید حداقل یک فیلد AutoNumber (که خودش عدد را خودکار افزایش میدهد) به جدول اضافه و ان را PrimaryKey کنید.


برای ویرایش کردن داده ها آن هم به صورت فله ای!!! نه تک تک تو اس کی ال سرور باید چه کدی رو بزنم؟ کد دیتااداپتر.اپدیت برای اکسس جواب می داد و داده هایی که تکس بودن و بایند شده بودن از طریق تکس باکس رو تغییر می داد اما برای اس کی ال ارور می ده.
من نمیدانم که باز اینجا هم PrimaryKey تعریف کرده اید یا نه.
فقدان PrimaryKey در جدول در پلتفرم ها و زبانهای مختلف خطاهای عجیب و غریبی را حادث میشود.
هر جدول کوچک و بزرگ اگر PrimaryKey ندارد صد در صد اول PrimaryKey را اضافه و اصلاح کنید.

دستورات UPDATE و DELETE جمعی در SQL SERVER فرق خاصی با موتور JET و ACCESS ندارد.

vorojax
11-01-2010, 21:00
سلام و تشکرات فراوان

بنده برای ایجاد رکورد جدید از دستور

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ارور زیر رو گرفت :
The variable name '@ID_net' has already been declared. Variable names must be unique within a query batch or stored procedure.

_H2_
16-01-2010, 11:51
سلام
شما دارید از روش DataAdapter و DataTable استفاده میکند.
کد شما در بالا از جنبه های گونانی ایراد دارد دارد، تقریباً هر خطش یک ایراد دارد!

اولاً اصلاً پیشنهاد میکنم برای درج یک سطر تکی از مکانیزم DataAdapter و DataTable استفاده نکنید و خودتان با شی Command دستور را اجرا کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این هم کد برای TypedDataAdapter و TypedDataSet: (که کمی مشکل بازدهی دارد)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

mohsen2007online
07-04-2010, 11:38
سلام من داشتم داخل پست ها چرخی میزدم که با این پست برخورد کردم که من هم این مشکل را دارم چی کار کنم که حل بشه؟


در حال حاضر بنده یک بانک اطلاعاتی رو به یک دیتا گرید متصل کردم دیتا گرید آپدیت می کنم بعد از تغییرات فقط دیتاست اپدیت می شه و بعد از یک رفرش در اتصال دوباره هر چی بود می پره....خلاصه اینکه چطوری تغییرات دیتاست رو انتقال بدم به دیتابیس اصلی؟

_H2_
09-04-2010, 00:10
سلام

من داشتم داخل پست ها چرخی میزدم که با این پست برخورد کردم که من هم این مشکل را دارم چی کار کنم که حل بشه؟
خوب شماکه سوالش را خواندید، جوابش را هم میخواندید!!!
این مسئله در پست 5 ام تاپیک جواب داده شده.
موفق باشید.

MahSanDesign
21-04-2015, 18:12
سلام

من یه مشکلی دارم
بعد از ویندوز عوض کردن و نصب دوباره برنامه visual studio 2012 و sql server 2008 ،وقتی میخوام با استفاده از ado.net دیتابیسم رو وارد ویژوال کنم server name هارو برام نمیاره و درواقع انگار دیتابیس های من رو sql رو نمیشناسه
میشه کمکم کنید؟
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

MahSanDesign
21-04-2015, 20:04
کسی نمیتونه کمکم کنه؟ من برای پروژه میخوام و خیلی فوریه.عکسشو لینک کردم ممنون میشم کمکم کنید

sarinaj
22-04-2015, 18:02
سلام خدمت دوستان عزیز
بنده این 900 اندی صفحه کتاب آقای هاشمیان و چندتا اموزش سی شارپ دیگه خوندم ! ولی نمی دونم چرا کار با این بانک اطلاعاتی رو درست یاد نمی گیرم!

در حال حاضر بنده یک بانک اطلاعاتی رو به یک دیتا گرید متصل کردم دیتا گرید آپدیت می کنم بعد از تغییرات فقط دیتاست اپدیت می شه و بعد از یک رفرش در اتصال دوباره هر چی بود می پره....خلاصه اینکه چطوری تغییرات دیتاست رو انتقال بدم به دیتابیس اصلی؟

(البته چندتا مشکل دیگم دارم! مثلا این اس کی ال کامند بیلدر رو نمی فهم چطور باید استفاد کنم!)

این هم کد هایی که واسه برنامه دیتا گرید نوشتم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سلام
ببینید این چیزیه که شما میگید اگه درست منظورتون فهمیده باشم
لینک دانلود ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

cnmeysam
12-06-2015, 18:18
سلام میدونم مطلب قدیمیه ولی من تازه کارم و به کمک نیاز شدید دارم
من یه دیتا گرید ساختم که بدون استفاده از ویزارد به دیتا بیس SQL وصلش کردم با استفاده از کلاس Connection
خیلی هم سرچ کردم به خدا. کسی میدونه چطوری و با چه کدی باید bindingSource رو به کلاس کانکشنم وصل کنم وبعد اون رو به bindingNavigator و در آخر به dataGridView ؟
اگه میشه یه قطعه کد با توضیح بذارید ممنون میشم

_H2_
20-06-2015, 08:32
سلام
برای استفاده مناسب از BindingSource و DataGridView شما میتوانید در یک رویکرد ساده از DataSet استفاده کنید.
یعنی اول از منوی Project>Add New Item یک typed-DataSet به پروژه تان اضافه کنید و جداول و فیلدها و ارتباطات را تنظیم کنید.

سپس پروژه را یکبار کامپایل کنید.
وارد Design فرم تان شوید و الآن در ToolBox تان باید TypedDataSet و TypedDataAdapter ای که ساخته اید را ببینید.
یکی از هر یکی از آنها را روی فرم تان قرار دهید.
BindingSource و DataGridView را هم اضافه کنید.

در همان Design خصیصه DataSource و DataMemeber کامپونت BindingSource را با نام DataSet تان پر کنید.
و خصیصه DataSource کنترلر DataGridView تان را با نام BindingSource تان پر کنید.

حالا با یک فرمان Fill میتوانید اطلاعات را خوانده و نشان دهید، این فرمان را میتوانید در رویداد FormLoad تان قرار دهید، فرم کلی این فرمان چنین است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

جهت فهم بیشتر، در واقع جریان اطلاعات در زمان خواندن (SELECT) چنین خواهد بود
DATABASE >> DataAdapter >> DataSet >> BindingSource >> DataGridView

BindingSource بین DataSet و DataGridView کمک میکند تا بتوانید ناوبری (جابجایی بین سطرها و تشخیص سطر جاری) را دستی مدیریت کنید.
موفق باشید.

_H2_
20-06-2015, 08:32
سلام
برای استفاده مناسب از BindingSource و DataGridView شما میتوانید در یک رویکرد ساده از DataSet استفاده کنید.
یعنی اول از منوی Project>Add New Item یک typed-DataSet به پروژه تان اضافه کنید و جداول و فیلدها و ارتباطات را تنظیم کنید.

سپس پروژه را یکبار کامپایل کنید.
وارد Design فرم تان شوید و الآن در ToolBox تان باید TypedDataSet و TypedDataAdapter ای که ساخته اید را ببینید.
یکی از هر یکی از آنها را روی فرم تان قرار دهید.
BindingSource و DataGridView را هم اضافه کنید.

در همان Design خصیصه DataSource و DataMemeber کامپونت BindingSource را با نام DataSet تان پر کنید.
و خصیصه DataSource کنترلر DataGridView تان را با نام BindingSource تان پر کنید.

حالا با یک فرمان Fill میتوانید اطلاعات را خوانده و نشان دهید، این فرمان را میتوانید در رویداد FormLoad تان قرار دهید، فرم کلی این فرمان چنین است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

جهت فهم بیشتر، در واقع جریان اطلاعات در زمان خواندن (SELECT) چنین خواهد بود
DATABASE >> DataAdapter >> DataSet >> BindingSource >> DataGridView

BindingSource بین DataSet و DataGridView کمک میکند تا بتوانید ناوبری (جابجایی بین سطرها و تشخیص سطر جاری) را دستی مدیریت کنید.
موفق باشید.