1398-10-09 13:10 ارتباط سی شارپ با SQL
milad01

 
سلام دووستان یه برنامه نوشتم که با SQL در ارتباط هست.
رو سیستم خودم اوکی کار میکنه اما میخواستم رو سیستم دیگه اجرا کنم که متسفانه پیغام خطا میده و خود نرم افزار بدون ارتباط با SQL بالا میاد
میشه یه مقدار راهنمایی بفرمایید
اگه تاپیکی هم در این زمینه هست بفرمایید
سپاس
1398-10-11 17:41
حاجی شریفی
مؤسس سایت
 
سلام

متاسفانه توضیح نداده اید که
نوع پروژه تان از چه نوعی است؟ ( وبی یا ویندوزی؟ )
نحوه اتصال و ORM تان چیست؟ ( خودتان با Connection,Command متصل شده اید یا از EF6 یا EFCore3 و... استفاده کرده اید؟ )
برنامه تان به چه خطایی میخورد؟
چه نسخه ای از SQL Server را نصب کرده اید؟( نسخه های کامل مانند Standard|Developer یا نسخه های سبک مانند Express|LocalDB )
دیتابیس را Attach کرده اید؟
ConnectionString فعلی تان چه مقادیری دارد؟
ConnectionString درون برنامه است؟ یا از بیرون قابل تنظیم است؟

پس من توضیحات کلی خواهم داد.
دیتابیس SQLServer یا Oracle و... برای کارکرد همزمان تحت شبکه با حتی چندین سرور طراحی شده اند.
فایل دیتابیس اینها به صورت یک فایل معمولی docx یا xlsx نیست که کپی کنید و کار کند.
نمی خواهم بگویم بحث پیچیده و مشکلی است ، کمی کار کنید قوانین و شرایط دست تان می آید ولی اگر اولین بارتان است، مسائل مختلفی را باید در نظر بگیرید

1) باید در مقصد SQLServer مناسب را نصب کرده باشید.

2) بطور معمول باید دیتابیس و فایل mdf دیتابیس را در رایانه مقصد Attach کنید.
2-الف) یعنی باید فایل را در محل مناسبی از نظر امنیتی اکانت SQLServer به آن دسترسی داشته باشد Copy کنید و فرآیند Attach یا با خطا فرمان و یا برنامه SSMS انجام دهید.
( مثلا نباید فایل را در Desktop یا MyDocument خوتان کپی کنید، بطور پیشفرض SQLServer به این محل ها دسترسی ندارد )
Attach a Database by using SSMS

2-ب) برای پروژه های کوچک و تستی و غیرشبکه به شرط نصب SQL Server Express و یا SQL Server LocalDB میتوانید بدون Attach و با دادن مسیر/Path هم به فایل mdf دیتابیس متصل شوید.
( این کار به کمک خصیصه AttachDBFilename درون ConnectionString انجام میشود و برای نسخه های Express و LocalDB قابل انجام است )

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


2-ج) در این بند، مطلب دیگری هم قابل ذکر است و آن استفاده مناسب از ORM است.
ORM ای مانند EF6 و EFCore3 توانایی آن را دارد که دیتابیس تان را در خود رایانه مقصد ایجاد کند، این کار مزیت هایی دارد از جمله پوشش مشکل نسخه دیتابیس در زمان طراحی و سرور عملیاتی.

3) درصورتیکه پروژه وب/Web است یا باید exe های متعدد از شبکه به سرور متصل شوند، باید MixedMode و TCP را در SQLServer فعال کنید و بسیار بهتر است که یک Login+User+Pass هم تعریف کنید.

4) در نهایت باید برنامه را طوری بنویسی که ConnectionString دیتابیس درون کدها و فیکس ( اصطلاحا Hard-Code ) نباشد.
یعنی ConnectionString [color=gray](رمزشده یا غیررمزشده) از یک فایل (مانند app.config و web.config و appsettings.json و...) از بیرون برنامه خوانده شود.
تا بتوان بدون کامپایل و نسخه جدید، بسته به شرایط مقصد (IP, Port, DatabaseName, User, Password, AttachDBFilename و...) مقدار ConnectionString را ویرایش و تنظیم کرد.

خلاصه:
برای پروژه های کوچک، غیرشبکه ای نصب نسخه LocalDB بهترین گزینه است.
میتوانید فایل mdf دیتابیس را هم کنار exe تان قرار دهید و از ConnectionString ای شبیه این استفاده کنید.
Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DBNAME;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\DBFILE.mdf

توضیحات بیشتر در مورد AttachDBFilename
https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/creating-a-connection-string
دانلود SQL Server LocalDB 2019
http://33x.ir/s-ss2019-loc

با این مطالب ببینید در کجای کار هستید و تلاش مجددی داشته باشید.
انشاا... مشکل تان حل شود.
موفق باشید.