1397-10-11 20:12 اتچ کردن دیتابیس اس کیو ال کامپکت کنار برنامه در سیستم مخاطب
booysusa

 
درود
من یه برنامه ساده نوشتم میخوام وقتی مخاطب این برنامه رو می بره رو سیستم خودش کپی کنه، خطای اتصال دیتابیس نده

من کوئری کانکشن استرینگ رو مثلا اینجوری نوشتم




میخوام رو سیستم مخاطب به راحتی بالا بیاد و دیتابیس اتچ شده باشه کنار برنامه

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

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

اینم عکس برنامه
1397-10-11 23:06
حاجی شریفی
مؤسس سایت
 
سلام
خیلی سریع به پروژه تان نگاه کردم، دو مشکل میتواند مانع اجرای برنامه شما در رایانه دیگر شود.
اول) عدم نصب SQL Server Compact در رایانه جدید است
دوم) همان مشکل ConnectionString است.

برای مشکل اول بسته اصلی SQL CE را به پروژه تان اضافه کردم، که اگر صحیح publish بگیرید فایل هایی را کنار exe تان قرار میدهد و نیازی به نصب SQL CE نخواهید داشت.

برای مشکل دوم هم از DATADIRECTORY استفاده کردم که باعث میشود فایل دیتابیس از کنار exe خوانده شود.
هربار در VS کامپیال کنید ، خودکار فایل sdf را به کنار exe کپی میکند.
این باعث میشود بین اجراهای برنامه تان با VS هربار اطلاعات قبلی پاک شود!
ولی برای رایانه نهایی و در محیط بدون VS بهتر است.


نسخه ای کامپایل شده ای از برنامه تان هم برای اجرای نهایی در پوشه BIN قرار دادم.
(لینک دانلود پروژه تان در روزهای آتی از سرور حذف میشود)
Download 8MB
موفق باشید وشب خوش.
1397-10-12 09:46
booysusa

 
بازهم مثل همیشه عالی انجام دادید و به موقع به دادم رسیدید

مهندس شریفی فایل شما رو بررسی کردم و به مشکلم پی بردم واقعا سپساگزارم، ولی یک سوال: من به نحوی دیگه هم انجامش دادم ولی بسیار مبتدی تر از شما، اگر امکانش هست یه نگاه بهش بندازید ببینید این روش هم درست هست یا خیر؟ البته که میدونم اصولی نیست ولی نظر شمارو میخوام بدونم
لینک دانلود

دوم اینکه : شما یک پوشه به اسم پکیج گذاشتید کنار برنامه که دیگه نیازی نباشه در سیستم مقصد برنامه اس کیو ال کامپکت نصب بشود، چطوری من این پوشه را به برنامه یا سیستم مقصد معرفی کنم؟ آیا همین که در کنار برنامه پوشه ای به نام پکیج باشد کافیست یا کار دیگری هم باید انجام بدهم؟

بازم ممنونم از شما
1397-10-13 01:48
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
این روش هم درست هست یا خیر؟
منظورتان دستور زیر است
دستور شما
x = Application.StartupPath + "//UniversitySusaDB.sdf" ;

دستور بهتر
x = Application.StartupPath + "/UniversitySusaDB.sdf" ;

دستور باز هم بهتر
x = Application.StartupPath + "\\UniversitySusaDB.sdf" ;

دستور بی نقص
x = System.IO.Path.Combine(Application.StartupPath, "UniversitySusaDB.sdf" ) ;

یک دستور خوب دیگر
x = "|DATADIRECTORY|\\UniversitySusaDB.sdf" ;


نقل قول نوشته شده توسط: booysusa
شما یک پوشه به اسم پکیج گذاشتید کنار برنامه که دیگه نیازی نباشه در سیستم مقصد برنامه اس کیو ال کامپکت نصب بشود، چطوری من این پوشه را به برنامه یا سیستم مقصد معرفی کنم؟ آیا همین که در کنار برنامه پوشه ای به نام پکیج باشد کافیست یا کار دیگری هم باید انجام بدهم؟
اینطور کپی کردن این پوشه در کنار سورس ، فایده ای برای پروزه شما نخواهد داشت.
پیشنهادم آن است که از همان zip که برایتان فرستادم استفاده کنید...

این پوشه packages پس از افزودن بسته های nuget به پروژه، بطور خودکار اضافه میشود.
بسته nuget مربوطه در مسیر زیر قرار دارد:
https://packages.nuget.org/packages/Microsoft.SqlServer.Compact

افزودن بسته با فرمان Install-Package Microsoft.SqlServer.Compact و یا از طریق منوی مربوطه در VS2017 انجام میشود.


افزودن بسته فوق، باعث میشود تا ضمن اضافه شدن ارجاع System.Data.SqlServerCe.dll تنظیمات دیگری هم به پروژه شما اعمال شود که زمان کامپایل یکسری فایل اضافه کنار exe شما کپی شود.

در واقع اگر بخواهید دستی این کار را انجام دهید باید محتویات NativeBinaries داخل packages را کنار exe نهایی برنامه تان کپی کنید.

شب خوش
1397-10-13 21:14
booysusa

 
واقعا سپاسگزارم عالی همراه با عکس توضیح دادید
1397-11-07 13:11
booysusa

 
با درود فراوان

نقل قول
افزودن بسته فوق، باعث میشود تا ضمن اضافه شدن ارجاع System.Data.SqlServerCe.dll تنظیمات دیگری هم به پروژه شما اعمال شود که زمان کامپایل یکسری فایل اضافه کنار exe شما کپی شود.

جناب شریفی گرامی من بسته کامپکت را در آنجایی که فرمودید با روش صحیح شما انجام دادم، سپاسگزارم

فقط سوالی که پیش اومده برام این هست که دیدم شما حتی فایل FarsiMessageBox.dll را هم در پوشه پکیج قرار دادید، آیا من بصورت کپی پیست ساده در پوشه پکیج کپی کنم یا روش دیگری داردف چون نتونستم فایل FarsiMessageBox.dll از قسمت Mange NuGet Pacage نصب کنم

و سوال دومم، آیا هربار که خواستم چیزی به برنامم اضافه کنم، مثلا یک کامپوننت یا چیز هایی از این قبیل، باید از این روشی که شما فرمودید استفاده کنم؟
1397-11-08 03:22
حاجی شریفی
مؤسس سایت
 
سلام
اکثر کتابخانه های رایج در سایت Nuget ثبت شده اند و میتوانید از VS ارجاع به آنها را اضافه کنید.
که البته خود این Reference از Nuget در پروژه های قدیم و جدید dotNetCore به دو شیوه متفاوت انجام میشود.

در شیوه اول در پوشه packages انبار میشوند ولی اگر پوشه با باقی برنامه zip هم نشود، در لحظه بازشدن پروژه در VS رایانه جدید، بسته های nuget مجدد و بصورت خودکار دانلود شده و در همان پوشه ذخیره میشوند!

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



می ماند فایل های تک که میخواهید Reference کنید و در Nuget نیستند.
بهتر این فایل های تک را قبل از Add-Reference به پوشه ای در محل پروژه کپی کنید (مانند همان پوشه packages) و سپس Add-Reference را از این محل کنار پروژه انجام دهید.

در نهایت هم پروژه را خواستید جای دیگری ببرید، با این پوشه با هم zip میکنید و میبرید.
یعنی تنها نکته اش این است که اول فایل را کپی کنید وسپی از محل کنار پروژه Reference بدهید.

به این شیوه ارجاعات پروژه شما گم نخواهد شد و همیشه هم میتوانید پوشه های obj و bin را حذف کنید.