PDA

View Full Version : Database Helper، شروع یک پروژه ی Open Source در برنامه نویس!



hdv212
پنج شنبه 16 خرداد 1387, 11:39 صبح
با سلام
خبری جالب به عزیزانی که برنامه نویسی دیتابیس میکنند :
با تلاش و کوشش فراوان، و با هماهنگی ای که اینجانب(حامد وزیری) با آقای کرامتی (DelphiAssistant (http://barnamenevis.org/forum/member.php?u=1206)) به عمل آوردیم تصمیم بر این گرفتیم که ابزار Sp Generator (http://barnamenevis.org/forum/showthread.php?t=87372) ایشان را با ابزار Code Generator (http://barnamenevis.org/forum/showthread.php?t=103265) حقیر با هم ادغام کنیم.
همینطور با کوشش فراوان، سعی کردم که قابلیتی جالب را به این نرم افزار جدید اضافه نمایم که بتواند کلیه ی SP های یک دیتابیس را استخراج کرده و کد دات نت آن را تولید کند، در نهایت تمام این قابلیتها در یک ابزار، مجتمع شد و در اختیار شما عزیزان قرار گرفته خواهد شد، همچنین قصد ما بر این شد که این ابزار را به صورت Open Source منتشر کنیم، تا هم دوستان از شیوه ی کدنویسی مطلع شوند و هم در صورت امکان، کاربران بتوانند ایده های خود را روی این ابزار پیاده سازی نمایند و در آخر،در همین تاپیک قرار دهند و در احتیار سایر برنامه نویسان بگذارند، امیدواریم که این ابزار مورد توجه شما دوستان قرار بگیرد و بتوانیم با این کار، هرچند کوچک، گامی در جهت افزایش آگاهی و بهره وری شما برنامه نویسان ایران زمین برداشته باشیم، من، هم به نوبه ی خودم و هم از طرف آقای کرامتی (DelphiAssistant (http://barnamenevis.org/forum/member.php?u=1206)) پیشاپیش از حسن نظر شما تشکر میکنم و امیدوارم هرگونه کم و کاستی در این مجموعه دیدید، به بزرگی خودتون ببخشید.
توضیحات رو در یک فایل word در خود فایل قرار دادم، در مورد Sp Gen (http://barnamenevis.org/forum/showthread.php?t=87372) و Code Generator (http://barnamenevis.org/forum/showthread.php?t=103265)میتوانید به تاپیکهای مربوطه مراجعه کنید، اما برای قابلیت Stored Procedures Code Generator میتوانید از مثالی که در همین فایل قرار داده شده است استفاده کنید.
منتظر نظرات و انتقادات و همچنین ایده های شما عزیزان هستیم.
موفق باشید.
-------------------------------------
مهدی کرامتی - حامد وزیری




نسخه ی 1.5 آماده ی دریافت میباشد، لطفا برای اطلاعات بیشتر و همچنین دریافت آن به این لینک (http://barnamenevis.org/forum/showpost.php?p=577080&postcount=22) مراجعه کنید.


نسخه ی 2.0 آماده ی دریافت شد، برای اطلاعات بیشتر لطفا به این لینک (http://barnamenevis.org/forum/showpost.php?p=578121&postcount=23) مراجعه کنید.

Alireza_Salehi
یک شنبه 19 خرداد 1387, 22:27 عصر
یک باگ کوچولو (مهم نیست ولی رفع بشه بهتره):
در صورتی که نام دیتاسورس حاوی کاراکترهای غیر مجاز در نام گذاری متغییر ها باشد برنامه Exception تولید می کند. (این کاراکترها در SQL Server مجاز است) و در کد ها نام namespace ها با کاراکترهای غیر مجاز تولید می شوند.

مثلا نام دیتابیس این بوده:

C:\DATABASE.MDF


See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.Data.SqlClient.SqlException: Incorrect syntax near 'C:'.
at System.Data.SqlClient.SqlConnection.OnError(SqlExc eption exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnErro r(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndW arning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaDat a()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteRead er(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderT ds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(Com mandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataRead er(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbComman d.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(Data Set dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at NovinMedia.Data.DbObject.RunQuery(String Query, String tableName) in F:\Database Helper 1.0.0\MergeSpCodeGen\Classes\DbObject.cs:line 192
at DatabaseHelper.frmMain.GenerateSqlSpAndClassCodeAn dGetSps() in F:\Database Helper 1.0.0\MergeSpCodeGen\frmMain.cs:line 733
at DatabaseHelper.frmMain.btnGenerateCode_Click(Objec t sender, EventArgs e) in F:\Database Helper 1.0.0\MergeSpCodeGen\frmMain.cs:line 154
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

hdv212
یک شنبه 19 خرداد 1387, 23:23 عصر
در صورتی که نام دیتاسورس حاوی کاراکترهای غیر مجاز در نام گذاری متغییر ها باشد برنامه Exception تولید می کند. (این کاراکترها در SQL Server مجاز است) و در کد ها نام namespace ها با کاراکترهای غیر مجاز تولید می شوند.
arsp_2004 جان ممنون از حسن توجهت، بعد از این همه سعی و تلاش، دلمون به این خوش بود که بچه ها بیان یه نظری بدن!
شما پیشقدم شدی، دستت درست.
اما در مورد باگ، منظورت اینه که در نام دیتابیس از کاراکترهای غیر مجاز در دات نت استفاده کردی ؟
مثلا فضای خالی یا $ یا ... ؟
اوووووووه، فکر شما دیتابیس شما Sql Express باشه، یا دیتابیس رو به Sql Serverات Attatch کرده باشی، درسته ؟

hdv212
چهارشنبه 22 خرداد 1387, 19:55 عصر
دوستان، مقاله ای در مورد همین ابزار در سایت CodeProject (http://www.codeproject.com/) قرار دادم، لطفا به این لینک (http://www.codeproject.com/KB/database/DatabaseHelper.aspx) برید و به آن Rate بدید تا در مسابقه ای که همین سایت در مورد Code Generation (http://www.codeproject.com/Feature/CodeGenComp/) ترتیب داده، Rate مناسب رو به دست بیارم.
متشکرم

combo_ci
پنج شنبه 23 خرداد 1387, 00:07 صبح
سلام دوست عزيز
اولا يه تشكر مخصوص از زحمات شما و دوستانتون دارم

راستش يكي از بچه هاي شركت چند وقت پيش يك پروژه تو مايه هاي پروژه شما نوشته بود....البته نه به تكميلي پروژه شما...
اونجا من يه پيشنهاد دادم به ايشون كه با اجازتون اينجا هم ميگم

كلاسهايي كه اين برنامه توليد ميكنه خيلي كار با db رو راحت ميكنه...اما يه مشكل كه احتمالا شما هم بهش برخورد كردين اينه كه db يك برنامه از ايتداي ساختنش تا نسخه فاينال شايد 20 بار عوض بشه (حداقل يكي دو فيلد به جدول ها اضافه شه)

خوب اين يعني بعد از هر تغيير شما بايد يك بار كلاس مربوط به اوون table رو ايجاد كنه......

حالا شما اگه بتوني به برنامت اين خاصيت رو اضافه كني كه يه كلاس كلي درست بشه كه ديگه با هر تغيير db احتياج به توليد كلاس نداشته باشه....
اينم يه نمونه ساده از اين كلاس.....البته من اين كلاس رو خيلي تكميل كردم و با اووون كلاس ديگه حتا يه sp به برنامم اضافه نميكنم

اگر ايده اي داشتي بگو تا كلاس اصلي رو بزارم تا اگه خوب بود به برنامت اضافه كني
موفق باشي

hdv212
پنج شنبه 23 خرداد 1387, 01:36 صبح
combo_ci جان ممنون از حسن توجهت
کلاس شما رو دیدم، بسیار کار تمیز و قشنگیه، تقریبا چنین لایه ای رو گزینه ی Generate Stored Procedures .. انجام میده، البته یه تفاوت عمده ای که داره اینه که اون لیست کل Stored Procedure ها رو در میاره و اینکه برای شما کدهای مربوط به عملیات CRUD هم در نظر گرفته شده.
البته من هم قبل از اینکه حتی این نسخه رو Publish کنم، دنبال کاملتر کردن لایه ی Data Access منتها هنوز وقت نکردم که این کار رو انجام بدم، اولین محدودیتی که در لایه ی DataAccess من به نظرم اومد، عدم وجود متدی بود که بتونه Transaction رو انجام بده، البته کلاس شما بسیار ایده های خوبی به من داد، چشم، سر اولین فرصت سعی میکنم، کد لایه ی Data Access رو بهینه کنم.
به نظر شما به غیر از عملیات CRUD که شما در کلاست قرار دادی،(من این عملیات رو بر عهده ی Stored Procedure ها گذاشتم)، چه آیتمهای دیگه ای باید اضافه بشه تا این کلاس، مفید تر بشه ؟
همانطور که گفتم، به نظر من اولین آیتم، ایجاد متدی برای Transaction است.
راستی یه پیشنهاد در مورد کلاس خودتون :
در متد Insert، خطوط 176 تا 178 :

if (dr.Table.Columns[i].Caption.ToLower() == "id")
continue;
cmd.Parameters.AddWithValue("@" + dr.Table.Columns[i].Caption, dr[i]);
شما نام ستون مورد نظرت رو که احتمالا برای Identity بودن بررسی میشه، به id محدود کردی، به نظرم اگه به این صورت اصلاح بشه، بهتره :

if (dr.Table.Columns[i].AutoIncrement)
continue;
cmd.Parameters.AddWithValue("@" + dr.Table.Columns[i].Caption, dr[i]);
موفق باشید.

vcldeveloper
پنج شنبه 23 خرداد 1387, 01:43 صبح
با تلاش و کوشش فراوان، و با هماهنگی ای که اینجانب(حامد وزیری) با آقای کرامتی (DelphiAssistant (http://barnamenevis.org/forum/member.php?u=1206)) به عمل آوردیم تصمیم بر این گرفتیم که ابزار Sp Generator (http://barnamenevis.org/forum/showthread.php?t=87372) ایشان را با ابزار Code Generator (http://barnamenevis.org/forum/showthread.php?t=103265) حقیر با هم ادغام کنیم.
با جناب کرامتی صحبت کنید که یا سورس کد مربوطه را به SourceForge منتقل کنند، یا یک نسخه از Subversion بر روی سرور فعلی نصب کنند تا بتونید برای این نرم افزار یک سیستم Version Control داشته باشید و بحث های خود را در این تاپیک انجام بدید. در شرایط فعلی اگر قرار باشه هر کسی برای خودش سورس را تغییر بده، یا حتی فقط شما و آقای کرامتی (بدون استفاده از یک نرم افزار Version Control) بخواید سورس را تغییر بدید، در دراز مدت به بی نظمی دچار میشید و نگهداری سورس کد براتون فوق العاده سخت میشه!

combo_ci
پنج شنبه 23 خرداد 1387, 11:39 صبح
اينم ver 2 دوست عزيز.....
با اين كلاس ديگه احتياج به وجود sp در database نيست....

از خصوصيت هي متد insert اينه كه تشخيص ميده فيلد identity هست يا نيست...اگه نبود max(srl( از اووون table رو بدست مياره و يكي بهش اضافه ميكنه

توي ورژن قبلي اين توابع insert و update احتياج به sp داشتن اما اين كلاس خودش همه كار ها رو ميكنه......

به اوون موضوعي كه توي پست قبليم گفتم توجه كنبن.....با اضافه كردن اين كلاس به برنامه اگه 500 بار هم db عوض بشه كلاس databae هيچ تغييري نداره اما توي كار شما به تغيير يك جدول بايد sp هاي اوون جدول و كلاس db رو عوض كرد !!!!

hdv212
پنج شنبه 23 خرداد 1387, 13:00 عصر
اينم ver 2 دوست عزيز.....
با اين كلاس ديگه احتياج به وجود sp در database نيست....
combo_ci جان ممنون از توجهت، این کلاس هم مثل کلاس قبلی جامع و زیبا و کامل بود.
اما استفاده ی من از Sp به خاطر Performance بالای آن در دیتابیس میباشد.
چرا Stored Procedureها دارای Performance بیشتری نسبت به Plain Text Commandها هستند ؟
پاسخ :
به خاطر اینکه، قبل از اجرای هر فرمان، Sql Server دستور یا دستورات مورد نظر را از لحاظ شیوه ی اجرا آنالیز میکند، به این عملیات Execution Plan گفته میشود، سپس دستور مورد نظر را طبق Execution Plan به دست آورده اجرا میکند، اما Sql Server برای اینکه در مراجعات بعدی برای اجرای همان دستورات، دیگر نیازی به آنالیز و استخراج Execution PLan نداشته باشد، لیکن اون رو درحافظه نگهداری و به اصطلاح Cache میکند، حالا در مورد Plain Command Textها، فرض کنید در یک برنامه ی تحت شبکه، گزارشات زیادی از یک جدول با پارامتر های مختلف توسط کاربران گرفته میشود، با توجه به اینکه دستورات در همه ی موارد یکی است و فقط پارامترهای جستجو تغییر میکند، اما Sql Server این موضوع رو تشخیص نمیدهد و با هربار درخواست اجرای دستورات مشابه، با توجه با پارامترهای مختلف، آنها را جداگانه آنالیز و Execution PLan آنها را در حافظه Cache میکند، پس از مدتی حافظه مملو از Cacheهای بی مورد و زیادی میشود که باعث پایین آمدن Performance در اجرای دستورات در سرور میشود، اما در Stored Procedure، قضیه کاملا فرق میکنه، در این نوع اجرا، Sp مورد نظر فقط یک بار آنالیز و در حافظه cache میشود، و در مراجعات بعدی، با توجه به تغییر پارامتر های ورودی، Execution Plan تغییر نخواهد کرد، لذا در تعداد Queryهای زیاد و سنگین، Sp دارای Performance غیر قابل مقایسه نسبت به Plain Textهاست.
این فقط یکی از مزیت های Sp بود.

در مورد اینکه اگر دیتابیس عوض بشه، کلاسها هم باید عوض بشه، حرفتون درسته، ولی این کار رو برنامه براتون انجام میده، تنها با یک کلیک دوباره همه ی کلاسهای جدید تولید میشن!

combo_ci
پنج شنبه 23 خرداد 1387, 13:08 عصر
اميدوارم كلاس بدرد دوستان بخوره ....اگه كسي از sp نوستن و تغييرات در ver هاي بعدي نرم افزار خسته شده ميتونه از اين كلاس استفاده كنه

reza_62
دوشنبه 10 تیر 1387, 18:18 عصر
اگر بخواهیم در توسعه این پروژه همکاری کنیم چه جوری باید اقدام کنیم
با تشکر

رضا عربلو
دوشنبه 10 تیر 1387, 20:24 عصر
ضمن تبریک و خسته نباشید.
پروژه شما را دیدم. یکی از مواردی که به نظرم رسید این می باشد که برنامه فوق فیلدهای AllowNull را پوشش نمی دهد.

hdv212
سه شنبه 11 تیر 1387, 22:56 عصر
اگر بخواهیم در توسعه این پروژه همکاری کنیم چه جوری باید اقدام کنیم
با تشکر
با سلام به شما دوست گرامی، سورس این پروژه رو ضمیمه کردم، میتونی بازش کنی و توسعه ش بدی، اگر به مشکلی برخوردی بگو تا راهنماییت کنم، یا اگر نظر خاصی داره، پیغام خصوصی بده.

ضمن تبریک و خسته نباشید.
پروژه شما را دیدم. یکی از مواردی که به نظرم رسید این می باشد که برنامه فوق فیلدهای AllowNull را پوشش نمی دهد.
سلام، مرسی از شما، چشم در اولین فرصت روش کار میکنم.

reza_62
چهارشنبه 12 تیر 1387, 22:41 عصر
منظور من همکاری گروهی روی پروژه بود .
با تشکر

hdv212
جمعه 14 تیر 1387, 17:52 عصر
منظور من همکاری گروهی روی پروژه بود .
با تشکر
اشتیاق شما و بعضی از دوستان، باعث شادی و دلگرمی من میشه، امیدوارم تعداد این دوستان بیشتر بشه، اما برای توسعه:
شما علاوه بر تسلط کافی به دات نت، بایستی به Ado.Net خصوصا Sql Server تسلط کافی داشته باشید، همینطور آشنایی با System.CodeDom برای Generate کردن کد در runTime، پیشنهاد میکنم برای آشنایی با CodeDom به مستندات مایکروسافت مراجعه کنید.
در ضمن اگه میشه در مورد نحوه ی همکاریتون بیشتر توضیح بدید، آیا نظر خاصی دارید ؟ قابلیت مفیدی مد نظرتون هست که میخواهید به برنامه اضافه کنید ؟

reza_62
جمعه 14 تیر 1387, 19:43 عصر
آیا شما roadmap ای برای این پروژه دارید یا نه ؟
اگر ندارید من پیشنهاد می کنم یک چیزی مثل subsonic یا بهتر از آن را بتوانیم با پروژه شما دربیاریم !!!
یک نکته خوب در مورد کد شما ساده بودن همراه با توضیحات خوب مربوط به هر قسمت از کد می باشد که من در کمتر پروژه اپن سورسی حتی subsonic دیده ام

hdv212
شنبه 15 تیر 1387, 01:34 صبح
آیا شما roadmap ای برای این پروژه دارید یا نه ؟
منظورتون اینه که آیا هدف خاصی دارم ؟

اگر ندارید من پیشنهاد می کنم یک چیزی مثل subsonic یا بهتر از آن را بتوانیم با پروژه شما دربیاریم !!!
من خودم SubSonic رو نصب کردم، مستنداتش میگه خیلی به درد بخوره، ئلی من خودم هنوز موفق نشدم باهاش کار کنم، از بس که توضیحاتش ناقص بود(شایدم من کم دقتی کردم)

یک نکته خوب در مورد کد شما ساده بودن همراه با توضیحات خوب مربوط به هر قسمت از کد می باشد که من در کمتر پروژه اپن سورسی حتی subsonic دیده ام
دوست عزیز لطف داری شما، مشخصه که سورس نرم افزار رو با دقت داری دنبال میکنی، عالیه.
خب این ابزار با توجه به FeedBackهایی میرسه، نیاز به تغییرات و اصلاحاتی داره، مثلا کد مربوط به تولید کد Sql برای آقای کرامتی، بایستی متد Insert رو بهینه بکنیم که آخرین رکوردی رو که وارد میشه برگردونه.
یا Load کردن آبجکت های دیتابیس برای دیتابیس های بزرگ زیاد جالب نیست، باید بهینه بشه (SqlDmo انتخاب خوبی برای این کار نبود، لااقل به این شکل نه)
مشکلاتی که برای نامهای غیر استاندارد داره باید حل بشه، و خیلی چیزای دیگه.
متاسفانه من هنوز به دلیل مشغله ی کاری وقت نکردم این کار رو بکنم، ولی در اولین فرصت حتما یه دست به سر و روی این ابزار خواهم کشید و در این راه دست همه ی دوستان رو به گرمی میفشارم.
موفق باشید.

reza_62
شنبه 15 تیر 1387, 19:14 عصر
در مورد roadmap منظورم این بود که چه ایتم های را برای ورژنهای بعدی این ابزار در نظر داری که اگر خواستی من و بقیه دوستان روی آن کار کنیم البته یه مقدار توضیح دادی ولی اگر کامل مشخص کنی برای ورژن بعدی ابزار چه چیزهایی لازم است تا ما روی آن کار کنیم
با تشکر

hdv212
شنبه 15 تیر 1387, 22:33 عصر
برای شروع میتونی بر روی استورد پروسیجر Insert کار کنی، و کدش رو تغییر بدی، که به جای برگرداندن identity آخرین رکورد Insert شده، اونم به صورت Int (که اشتباهه، چون ممکنه PK جدولی از نوع Int نباشه)، آخرین رکورد Insert شده رو برگردونه،آفرین، برو جلو ببینیم چکار میکنی.

release2008
دوشنبه 14 مرداد 1387, 00:46 صبح
من وقتی فایل را extract کردم و می خواستم برم داخل پوشه پیغام زیر ظاهر می شه؟ به نظرتون از چی می تونه باشه؟

hdv212
دوشنبه 14 مرداد 1387, 14:58 عصر
یا آنتی ویروس شما مشکل داره، و یا اینکه سیستم شما آلوده به این کرم های اینترنتی شده که مرتب پیغام میدن سیستم شما دارای تروجان یا ویروس است و ...

hdv212
سه شنبه 29 مرداد 1387, 19:24 عصر
ورژن 1.5 ابزار Database Helper آماده شد.
با توجه به مشکلاتی که خودم در حین کار بهش برخورد میکردم، تصمیم گرفتم که تا سر حد امکان اونها رو حل کنم.
یکی از این مشکلات عمده، کد T-Sql مربوط به StoredProcedure ای بود که برای Insert ساخته میشد، توی این کد پس از Insert، آخرین Identidy اضافه شده رو (یعنی pk رکورد insert شده رو) به Caller بر میگردوند که این فقط در صورتی درست کار میکرد که PrimaryKey جدول ما یک فیلد int باشه و برای جداولی که pk های غیر از int دارند به درد نمیخورد، به خاطر همین، کد T-Sql ای که برای این عمل تولید میشد رو اصلاح کردم و با استفاده از یک تکنیک ساده، pk رکورد insert شده رو (چه int و identity باشه و چه کاراکتری و یا uniqueidentifier) به Caller برمیگردونه، این از اضلاحیه ی اول.

اصلاحیه ی دوم هم که بی ربط به قسمت اول نیست، کدهای دات نتی بود که برای متد Insert توی جدول ساخته میشد، چون بعضی اوقات نیاز هست که از Transaction استفاده کنیم، لذا میبایست pk رکورد insert شده رو در اختیار داشته باشیم تا بتونیم در جداول دیگه استفاده کنیم، به خاطر همین یک پارامتر که معرف فیلد pk رکورد مورد نظر هست رو بهش اضافه کردم که :
1. نوع پارامتر مورد مورد نظر با نوع فیلد pk همسنگش در Sql Server یکی هست.
2. این پارامتر به عنوان پارامتر خروجی در نظر گرفته میشه که pk رکورد insert شده رو در اختیار کد دات نت شما قرار میده و داخل متغیر مورد نظر میریزه (حتما با کلمه ی کلیدی out توی سی شارپ آشنایی دارید، اگر هم ندارید در نمونه برنامه ی زیر، نحوه ی استفاده از آن رو میتونید ببینید)
که از این طریق میتونید از pk رکورد insert شده در transaction ها استفاده کنید و یا هرکاری که نیاز باشه باهاش انجام بدید.

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

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

hdv212
پنج شنبه 31 مرداد 1387, 10:40 صبح
نسخه ی 2.0 از ابزار Database Helper آماده شد.
با توجه به FeedBack هایی که دوستان در سایت برنامه نویس و همینطور CodeProject (http://www.codeproject.com/KB/codegen/DatabaseHelper.aspx) بهم میدادن، تصمیم بر این گرفتم که تغییرات اساسی ای رو در ساختار برنامه ایجاد کنم، تغییرات در نسخه ی 2.0 به شرح زیر میباشد:

1. استفاده از Smo یا Sql Server Management Objects برای اتصال به Sql Server 2005 به جای Dmo یا Distributed Management Objects که برای Sql Server 2000 بود.
2. تغییرات اساسی در نحوی Load کردن آبجکت های مورد نیاز از دیتابیس (شامل StoredProcedureها، Tableها و ...)، که سرعت بازیابی اطلاعات از سرور تقریبا 10 برابر بیشتر از نسخه های قبلی شده!
3. اضافه کردن قابلیت توسعه ی نرم افزار به وسیله ی Third Party ها :
با استفاده از این قابلیت اگر دوستان، ایده ای به نظرشون رسید، میتونن خودشون امکانات این ابزار رو با استفاده از SDK ای که برای این ابزار در نظر گرفتم، قابلیتهای مورد نظرشون رو به این ابزار اضافه کنن،پس از این، قابلیت مورد نظر از طریق منوی PlugIns>YourPlugInName در دسترس خواهد بود، روند کار به صورت زیر میباشد :

1. پروژه ای از نوع Class Library ایجاد کنید.
2. اسمبلی DatabaseHelperSDK.dll رو به لیست References اضافه کنید.
3. کلاس مورد نظرتون رو از اینترفیس IPlugIn مشتق کنید (این اینترفیس در فضای نام DatabaseHelperSDK موجود میباشد).
4. سه متد زیر رو Implement کنید :
InitializeComponent : متد اصلی که وظیفه ی بارگذاری و Initialize کردن PlugIn شما رو به عهده خواهد داشت،
این متد، یک ToolStripMenuItem با نامی که شما مشخص میکتید رو خواهد ساخت و به منوی PlugIns اضافه خواهد کرد.
Author : اطلاعاتی راجع به نویسنده ی این PlugIn
Description : توضیحاتی در مورد PlugIn
5. سپس یک روریداد Click برای آبجکت ToolStripMenuItem تون ایجاد و عملی رو که اون PlugIn انجام میده رو در داخل اون رویداد بنویسید.
6. پروژه تون رو کامپایل کنید و سپس اسمبلی مورد نظر رو در برنامه Database Helper، داخل دایرکتوری PlugIns کپی کنید و سپس برنامه ی Database Helper رو اجرا کنید، حالا وقتی روی منوی PlugIns کلیک میکنید باید PlugIn خودتون رو در لیست SubMenu ها ببینید.

پروژه ی Database Helper v 2.0 به همراه نمونه PlugIn ای که نحوه ی توسعه دادن Database Helper رو نشون میده از طریق لینکهای زیر قابل دریافت میباشد.
خوشحال میشم، این برنامه رو تست و نتیجه رو در همین تاپیک مطرح کنید تا به بحث و تبادل نظر بپردازیم، همینطور دوستانی که قصد همکاری رو داشتن، دیگه به راحتی میتونن این کار رو انجام بدن (این قابلیت رو به خاطر شما ایجاد کردم).
منتظر نظرات، انتقادات و پیشنهادات شما هستم.
یا علی.
---------------------
حامد وزیری

mahdi_negahi
پنج شنبه 31 مرداد 1387, 11:29 صبح
سلام
پیشنهاد میکنم ، متد هایی برای در نرم اSELECT تعبیه شود که خروجی آن DATASET باشد ، بنده یک Generator در زمانی به نسبت دور نوشتم ، در موقع استفاده به این متد احتیاج فروان پیدا کردم

hdv212
پنج شنبه 31 مرداد 1387, 12:07 عصر
سلام
پیشنهاد میکنم ، متد هایی برای در نرم اSELECT تعبیه شود که خروجی آن DATASET باشد ، بنده یک Generator در زمانی به نسبت دور نوشتم ، در موقع استفاده به این متد احتیاج فروان پیدا کردم
مرسی مهدی جان، ولی تمام کدهای دات نتی که برای Stored Procdureها نوشته میشه DataTable برمیگردونه، این نیازتو برآورده نمیکنه ؟

bachebahal_1363
جمعه 08 شهریور 1387, 21:29 عصر
سلام دوست من
از کمک هایی که به من کردین واقعا ممنونم
فرصت تشکر کردن در اون پست رو نداشتم اما اینجا ازت تشکر می کنم
من از برنامه بسیار پر کاربر شما کمال تشکر رو دارم
از سورسش که در اختیار کاربران هم قرار دادین تشکر می کنم چون واقعا کمک خیلی زیادی به تجربه کردن یک پروژه که ObjectOriented باشه لذت می برن .
فقط در استفاده از برنامه شما و آقای کرامتی به یک مشکل برخورد کردم
من به SqlServer2008 سویچ کردم خوب هم به جهت امکانات بسیار زیادی که در این ورژن هست مخصوصا PersianCollation .
زمانی که می خوام از برنامه شما استفاده کنم برای Generate کردن ، در هنگام Connect کردن Error زیر رو می ده . به نظر شما می شه چه کاری برای این موضوع کرد ؟

hdv212
شنبه 09 شهریور 1387, 00:18 صبح
سلام دوست من
از کمک هایی که به من کردین واقعا ممنونم
فرصت تشکر کردن در اون پست رو نداشتم اما اینجا ازت تشکر می کنم
من از برنامه بسیار پر کاربر شما کمال تشکر رو دارم
از سورسش که در اختیار کاربران هم قرار دادین تشکر می کنم چون واقعا کمک خیلی زیادی به تجربه کردن یک پروژه که ObjectOriented باشه لذت می برن .
فقط در استفاده از برنامه شما و آقای کرامتی به یک مشکل برخورد کردم
من به SqlServer2008 سویچ کردم خوب هم به جهت امکانات بسیار زیادی که در این ورژن هست مخصوصا PersianCollation .
زمانی که می خوام از برنامه شما استفاده کنم برای Generate کردن ، در هنگام Connect کردن Error زیر رو می ده . به نظر شما می شه چه کاری برای این موضوع کرد ؟

با تشکر از لطف شما دوست گرامی
این مشکل به دلیل این اتفاق میفته که DbHelper از طریق Sql Native Client 2005 به Sql Server 2008 وصل میشه، Collation فارسی در Sql Server 2008 پشتیبانی میشه ولی در Sql Native Client 2005 پشتیبانی نمیشه، من توی اینترنت دنبال این موضوع گشتم و این لینک (http://support.microsoft.com/kb/944929) رو پیدا کردم، که در بالای همان صفحه اشاره به این لینک (http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=944929&kbln=en-us) داشت که دارای HotFix مورد نظر برای رفع این مشکل میباشد، متاسفانه من چون خودم هنوز Sql Server 2008 رو نصب نکردم، نمیتونم بگم که مشکل حل میشه یا نه، شما لطف کنید لینک (http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=944929&kbln=en-us) رو چک و HotFix مربوطه رو دانلود و نصب کنید و نتیجه رو هم در همین تاپیک اعلام کنید.
با تشکر.

bachebahal_1363
شنبه 09 شهریور 1387, 22:03 عصر
با تشکر از لطف شما دوست گرامی
این مشکل به دلیل این اتفاق میفته که DbHelper از طریق Sql Native Client 2005 به Sql Server 2008 وصل میشه، Collation فارسی در Sql Server 2008 پشتیبانی میشه ولی در Sql Native Client 2005 پشتیبانی نمیشه، من توی اینترنت دنبال این موضوع گشتم و این لینک (http://support.microsoft.com/kb/944929) رو پیدا کردم، که در بالای همان صفحه اشاره به این لینک (http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=944929&kbln=en-us) داشت که دارای HotFix مورد نظر برای رفع این مشکل میباشد، متاسفانه من چون خودم هنوز Sql Server 2008 رو نصب نکردم، نمیتونم بگم که مشکل حل میشه یا نه، شما لطف کنید لینک (http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=944929&kbln=en-us) رو چک و HotFix مربوطه رو دانلود و نصب کنید و نتیجه رو هم در همین تاپیک اعلام کنید.
با تشکر.

با سلام خدمت دوستان
بنده دو Hotfix ی که Microsoft داده بود رو دانلود و نصب کردم و مشکلم حل شد .
فقط مشکل حجم بسیار زیاد یکی Hotfix ها بود که یکی 3 مگابایت و دیگری 137 مگابایت بود .

bachebahal_1363
دوشنبه 11 شهریور 1387, 21:36 عصر
سلام hdv212 عزیز
در رابطه با برنامه شما من هم یک برنامه جهت Backup و Restore از دیتابیس نوشتم که به مشکل مشابهی برخورد کرده اما اون برنامه چون با SQLDMO نوشته شده مشکلش با دانلود و نصب HotFix بالا رفع نشده آدرس دانلود برنامه رو در زیر میزارم اگر امکان داره یه نگاهی بهش بنداز و Errorی که برنامه من در رابطه با SQlSERVER2008 می ده هم در پائین می زارم .
ممنون می شم اگر در این مورد هم کمک کنید .
لینک دانلود مستقیم (http://barnamenevis.org/forum/attachment.php?attachmentid=20427&d=1216048972)

hdv212
دوشنبه 11 شهریور 1387, 23:43 عصر
در رابطه با برنامه شما من هم یک برنامه جهت Backup و Restore از دیتابیس نوشتم که به مشکل مشابهی برخورد کرده اما اون برنامه چون با SQLDMO نوشته شده مشکلش با دانلود و نصب HotFix بالا رفع نشده آدرس دانلود برنامه رو در زیر میزارم اگر امکان داره یه نگاهی بهش بنداز و Errorی که برنامه من در رابطه با SQlSERVER2008 می ده هم در پائین می زارم .
ممنون می شم اگر در این مورد هم کمک کنید .
سلام دوست عزیز، سعی کنید از Smo استفاده کنید(همانطور که من استفاده کردم)، Smo ویرایش جدیدی از همون Dmo هست(منتها برای 2005)، روشهای کارش تقریبا همونه، امتحان کن ببین درست میشه.

hosseinab
پنج شنبه 30 آبان 1387, 09:48 صبح
سلام خسته نباشيد
من برنامه تون رو اجرا كردم وقتي مي خوام شاخه sp يا table هر ديتابيسي رو با كنم پيغام
An exception batch occurred while executing a Transact-SQL statement or batch
ميده اين رو با چند روش وصل شدن تست كردم

ebnsina
پنج شنبه 30 آبان 1387, 12:08 عصر
اميدوارم كلاس بدرد دوستان بخوره ....اگه كسي از sp نوستن و تغييرات در ver هاي بعدي نرم افزار خسته شده ميتونه از اين كلاس استفاده كنه


دوست عزيز ، من هم با متدي مشابه شما از چند سال قبل به اين طرف كار ميكنم.
اليته تا دوسال پيش با اين روش در دلفي كار ميكنم و بعد از اون با C#


اما مطلبي كه شما اشاره كرديد در واقع تقابل بين دو ديدگاه در توليد لايه هاي Interface و Logic (يا همون Bussiness Rules ) هست : :شیطان:

1- ديدگاه اول مربوط به توسعه به اينصورته كه Data Wrapper Class در لايه Interface و Logic ها هم در لايه Data قرار مي گيرند كه دوستان در اين تاپيك اين روش رو دنبال مي كنند.

2- ديدگاه دوم (كه منتقداني در همين سايت داره) بصورت Data Smart Class در لايه Interface است و بخش زيادي از Logic در همين لايه قرار مي گيره. البته در موارد تهيه گزارش باز هم رجوع به Logic ها و يا Store Procedure ها در لايه Data مورد استفاده است كه همچنان سرعت پردازش و گزارش دهي را بالا نگه مي داره. در واقع بخشي از Logic در لايه Interface و بخشي به لايه Data تقسيم ميشه.

حالت دوم (يعني حالتي كه من و شما استفاده مي كنيم) به دلايلي برتره (البته با اين دلايل) :
1- توسعه و برنامه نويسي با اون خيلي سريعتره !!
2- با هر تغييري نيازي به دوباره سازي كلاسها با ابزارهاي اتوماتيك نيست.
3- در صورتي كه در روش اول براي كلاس خاصي مقداري سورس پرداختي نوشته شده باشه و بعد بدون اينكه برنامه نويس يادش باشه اون كلاس را دوباره بسازه ، سورس هاي پرداختي مي پره !!
و ....

اميدوارم كه با كمك شما بشه در يك فرصت مناسب ايده خودمون رو بعنوان يك تاپيك مستقل مطرح كنيم و بسط بديم. (به كرم مولا اميرالمومنين)

البته از انتقادات و پيشنهادات دوستان خوشحال ميشيم !! :عصبانی:

حامد مصافی
پنج شنبه 01 اسفند 1387, 19:30 عصر
این عالیه که تصمیم به توزیع برنامه به صورت اوپن سورس گرفتید، اما بهتر است برای توزیع مجدد یا دیکامپایل پروژه لایسنسی انتخاب کنید. برای مثال GPL انتخاب خوبیست و اما برای مشارکت سایرین بهتر است پروژه را در یک سایت میزبانی اوپن سورس مثل Sourceforge.org ثبت کنید تا علاقمندان به طور رسمی به پروژه بپیوندند.

Mahdi-563
یک شنبه 04 اسفند 1387, 15:23 عصر
سلام دوست عزيز
يه پيشنهاد ميشه نسخه‌اي هم براي وب از اين كلاس درست كرد من در نسخ 1 سعي كردم ولي نشد اما تنها تغيير لازم براي مديريت خطاس كه من اين كارو دستي كردم
throw new HttpException(ex.Message);

meh_sol2002
چهارشنبه 07 اسفند 1387, 17:35 عصر
سلام combo_ci برنامه سما رو من نتونستم دانلود کنم
لطف میکنید دوباره بذارید

sedehi
دوشنبه 21 اردیبهشت 1388, 19:53 عصر
اميدوارم كلاس بدرد دوستان بخوره ....اگه كسي از sp نوستن و تغييرات در ver هاي بعدي نرم افزار خسته شده ميتونه از اين كلاس استفاده كنه

combo_ci عزيز ظاهرا شما کلاس مربوطه را از تاپيک حذف کرده ايد اگر ممکنه مجددا آن را قرار دهيد ممنون ميشيم . :ناراحت:

sedehi
چهارشنبه 23 اردیبهشت 1388, 16:24 عصر
آقاي وزيري عزيز
با سلام
بايد بگويم که کار بسيار زيبا و جالبي کرده ايد و انصافا جاي تشکر و تقدير فراوان دارد .
من دو پيشنهاد دارم يکي اينکه امکان Encription را در برنامه تعبيه کنيد و دوم اينکه امکان سلکت کردن جداول را در برنامه فراهم نمائيد چرا که ممکن است User نخواهد ار تمام جداول موجود در ديتا بيس استفاده کند .
موفق باشيد . :تشویق:

farnooshhp
چهارشنبه 27 خرداد 1388, 11:51 صبح
دوست عزیز خسته نباشید. برنامه تان عالی بود. یه سوال و یه پیشنهاد داشتم.
سوال اینکه ورژن 2.0.0 آیا با sql server 2000 کار میکنه یا نه؟ اگر نه بهتره امکانش رو بذارید.
و پیشنهاد اینکه برنامه SP Gen آقای کرامتی که من باهاش کار کردم محیطش user friendly تر هستش و کدهاش تو محیطی شبیه سی شارپ هست که چشم انداز قشنگتری داره و کار باهاش راحت تره. اگر امکانش هست این قضیه رو هم پیگیری کنید. باز هم ممنون از برنامه خوب و پر کاربردتون

farnooshhp
پنج شنبه 11 تیر 1388, 08:35 صبح
چی شد؟ جواب منو نمیدید؟

hdv212
شنبه 13 تیر 1388, 01:13 صبح
چی شد؟ جواب منو نمیدید؟

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

shojaei_moh
یک شنبه 22 فروردین 1389, 11:14 صبح
سلام
شما نوشته اید اگر دات نت نمی دانید وارد نشوید آیا بهتر نیست چند تا پروژه ساده که نرمال سازی شده بگذارین تا ماها که تازه کار هستیم استفاده کنیم من توی این سایت خیلی گشتم ولی متاسفانه اون چیزی رو که می خواستم پیدا نکردم .

HAMRAHSOFT.IR
سه شنبه 26 بهمن 1389, 14:12 عصر
آقا نمي شه يك كاري كرد كه بانك اكسس كار كنه كد توليد

Hesamzadeh
جمعه 17 تیر 1390, 15:49 عصر
سلام
نسخه 3 این برنامه بسیار عالی رو با تغییرات زیر دانلود کنید:
1- پشتیبانی از owned schema
2- افزودن منوی تنظیمات
3- ذخیره مسیر فایل های خروجی
4- تصحیح چند ایراد کوچک در ساخت SP
72125
72126

HAMRAHSOFT.IR
یک شنبه 19 تیر 1390, 22:40 عصر
سلام
نسخه 3 این برنامه بسیار عالی رو با تغییرات زیر دانلود کنید:
1- پشتیبانی از owned schema
2- افزودن منوی تنظیمات
3- ذخیره مسیر فایل های خروجی
4- تصحیح چند ایراد کوچک در ساخت SP
72125
72126

سلام
با sql2008کارنمیکنه

Hesamzadeh
پنج شنبه 23 تیر 1390, 10:38 صبح
میتونید بگید چه ایرادی داره چون من sql2008 R2 دارم تستش میکنم

HAMRAHSOFT.IR
پنج شنبه 23 تیر 1390, 13:55 عصر
من هرچی سعی میکنم نمیشه به دیتا بیس کانکت بشه

Hesamzadeh
پنج شنبه 23 تیر 1390, 21:19 عصر
آیا خطا میده یا فقط دیتابیس ها رو نشون نمیده؟
در ضمن روی سیستمی که دارید از این برنامه استفاده میکنید هم باید sql نصب باشه (به علت استفاده از کتابخانه های sql).

HAMRAHSOFT.IR
جمعه 24 تیر 1390, 09:47 صبح
دوست خوب ویندوز 7 استفاده مکنم بد درقدیمی ها کد ذا داخل برنامه نشون میداد اما خلا باید داخل فایل ذخیر کرد؟

omidh2007
پنج شنبه 26 آبان 1390, 19:50 عصر
من نسخه 3 رو تست کردم روی SQL Server 2008 R2 جواب هم داد .
هم برای تولید فایل cs. و هم برای فایل sql. که حاوی sp ه.

HAMRAHSOFT.IR
جمعه 27 آبان 1390, 01:37 صبح
دوست خوب دوباره تست کردم این خطا و سرعت خیلی کند

اگه بشه کد ساخت شده داخل پنچره رئ برو دید بهتر

Alfa_Debager
شنبه 18 خرداد 1392, 13:20 عصر
سلام به همه
من ورژن نهاییتونا تست کردم روی sql 2012
مشکلی نداشت فقط یه ایراد بزرگ دیدم که امیدوارم حلش کنید
مشکل اینه که من تو دیتابیس از schema استفاده کردم که این فقط dbo را نشون میده
بازم از زحماتتون متشکرم

Alfa_Debager
شنبه 18 خرداد 1392, 15:03 عصر
با سلام مجدد یه مشکل دیگه تو sql 2012
خروجی sp ها به شکل زیر هستش لطفا علت را شناسایی کنید
ممنون میشم بگید عاملش چیه و چکار باید کرد
ممنون
مثال خروجی
-- ================================================== ========================================
-- Entity Name: dbo.1_tbl_Table_SelectAll
-- Create date: 06/08/2013 03:37:23 ب.ظ
-- Description: This stored procedure is intended for selecting all rows from dbo.1_tbl_Table table
-- ================================================== ========================================
Create Procedure dbo.1_tbl_Table_SelectAll
As
Begin
Select

From dbo.1_tbl_Table
End

GO