1398/01/21 13:10 ارسال اطلاعات یک فرم به دو جدول در دیتابیس
booysusa

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

ولی هرکاری میکنم فقط میتونم اطلاعات رو به یک جدول (Contact) ارسال کنم
اگر امکانش هست برنامه را بررسی کنید و در این زمینه من را یاری کنید
سپاس
لینک دانلود برنامه


اطلاعات برنامه:
ویژوال استودیو 2015
سی شارپ
دیتابیس اس کیو ال اکسپرس (بانک اطلاعاتی رو با خود برنامه ویژوال استودیو 2015 ساختم)
1398/01/23 23:43
حاجی شریفی
مؤسس سایت
 
سلام
جدول KartMeli شما هیچ ارتباط/Relation ای به جدول اشخاص ندارد.
شما فقط دو ستون "سریال و نوع" را نگاه میدارید !
اگر اطلاعات 100 نفر را در این جدول ذخیره کنیم از کجا میخواهید بدانید کدام سطر برای کدام نفر است؟!

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

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

چرا کدملی را در همان جدول Contact نگاه نمیدارید؟ اصلا برای چه میخواهید دو جدول باشد؟
پیشنهاد من این است که کدملی را هم در همان جدول Contact نگهداری کنید.

گمانم شما باید مطالعات بیشتری در خصوص طراحی دیتابیس و مباحث نرمال سازی دیتابیس داشته باشید.
(من یا هرکسی در اینترنت تا حدی به شما توضیح میدهیم ولی نمیتوانیم مباحث یک کتاب 500 یا 700 صفحه ای را در چند خط حلاصه کرد)
1398/01/24 8:18
booysusa

 
درود بر شما و سپاس بابت توضیحاتتان
نقل قول
گمانم شما باید مطالعات بیشتری در خصوص طراحی دیتابیس و مباحث نرمال سازی دیتابیس داشته باشید.

(من یا هرکسی در اینترنت تا حدی به شما توضیح میدهیم ولی نمیتوانیم مباحث یک کتاب 500 یا 700 صفحه ای را در چند خط حلاصه کرد)

بله شما درست می فرمائید مهندس، اطلاعاتم کافی نیست، البته ناگفته نماند در این چندماه تا حدودی مطالعه کردم مبحث یک به یک و چند به یک ...

نقل قول
چرا کدملی را در همان جدول Contact نگاه نمیدارید؟ اصلا برای چه میخواهید دو جدول باشد؟

پیشنهاد من این است که کدملی را هم در همان جدول Contact نگهداری کنید.

ممکنه است عناصر ورودی بیش از 150 داده باشند، نگه داشتن همگی در یک جدول Contact بنظرم کار درستی نیست و در برخی برنامه دیدم بیش از 10 جدول دارند که مایل بودم برنامه اصلی من اینگونه برنامه ای می بود

این برنامه که آپلوده شده است یک نمونه بود که اگر این روش را یاد میگرفتم، در برنامه اصلی اطلاعاتی بیشتری با جدول های بیشتری وارد می کردم، من مایل بودم ارتباط آنها با کدملی یا اینکه آیدی باشد
1398/01/24 21:58
حاجی شریفی
مؤسس سایت
 
سلام
برای رابطه یک-به-یک میتوانید کلید/PrimaryKey را در جدول دوم تکرار کنید

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

جدول اصلی (اول)
ContactID | FirstName | LastName | FatherName | ...
123 | Muhammad | Muhammadi | Ahmad ...


جدول دوم (آخرین مدرک تحصیلی)
ContactID | Title | Degree | University | ...
123 | Software | 15 | Princeton ...


بهتر است در جدول اول/اصلی ، PrimaryKey را AutoNumber/Identity قرار دهید.
یعنی خودکار عدد بگیرید و خودکار زیاد شود.
جدول اول یا اصلی همان جدولی است که مهم تر است و همیشه پر میشود.

ولی در جدول دوم به بعد باید AutoNumber/Identity خاموش باشد.
و در بقیه جداول با رابطه یک-به-یک فقط با نگهداری عدد PrimaryKey میتوانید رابطه را حفظ کنید و مشخص شود هر سطر به چه سطری مرتبط است.
نکته مهم وجود همین PrimaryKey یکسان در هر دوجدول است.



در این حالت برای Insert ، اول اطلاعات جدول اول را Insert میکنید و پس از تخصیص و به دست آوردن عدد Identity کلید جدید، سپس اقدام به Insert جدول دوم میکنیم.

برای Delete هم بهتر است برعکس عمل شود و اول جدول دوم و سپس سطر جدول اصلی حذف شود.

برای Update شرایط ساده تر است، چون Identity کلیدها ReadOnly و غیر قابل تغییر است، پس برای یک سطر همواره ثابت است و به دلخواه میتوانید هر کدام از جداول را Update کنید یا نکنید.

برای Select هم که باز با داشتن کلید ثابت، میتوانید سطر هر جدول را به دلخواه واکشی کنید.

این را هم عرض کنم که این جدول دوم را میتوان تعمیم داد به جدول سوم و چهارم و پنجم و....

با توضیحات فوق تلاشی کنید، حتما میتوانید انجامش دهید، مشکلی بود در خدمت تان هستم.
موفق باشید.
1398/01/25 23:52
booysusa

 
درود بر شما

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

فقط برای اینکه فعلا کارم پیش بره، آیا اگر دیتابیسم رو با یک جدول ببندم، یعنی همه اطلاعات در یک جدول باشند، در آینده میتونم تفکیکشون کنم؟ بیشتر نگرانی ام در این مورد هست، منظور از تفکیک یعنی بعدا میتونم بدون اسیب رسونده به اطلاعاتی که ذخیره شده، دیتابیسم رو درون چندین جدول بشکنم؟ و همچنین میتوانم فیلدهای مختلف به دیتابیس ایجاد کنم؟
1398/01/26 4:47
حاجی شریفی
مؤسس سایت
 
سلام مجدد
گرچه گفته میشود بهتر است کمتر ساختار داخلی دیتابیس تغییر کند ولی حقیقت آن است که تغییر ساختار دیتابیس اجتناب ناپذیر است و جزء روند عادی چرخه تکامل یک نرم افزار است.

و مشکلی هم از بابت تغییر دیتابیس در آینده وجود ندارد، فقط این تغییرات باید با دقت و اسکریپت های مناسب SQL انجام شود.
یعنی برای بروزرسانی دیتابیس باید یک SQL بنویسید که میتوانید بارها روی Backup دیتابیس ، آزمایش اش کنید تا از صحت آن مطمئن شوید.
مثلا برای شکستن یک جدول بزرگ به دو جدول کوچک در آینده کدی شبیه این نیاز خواهید داشت.
/*file: appname_upgrade_v1_0_0_0_to_v2_0_0_0.sql*/ 

CREATE TABLE new_table_name_1 (***columns***);

CREATE TABLE new_table_name_2 (***columns***);

INSERT INTO new_table_name_1(***new-columns***)
SELECT ***old-columns*** FROM old_table_name;

INSERT INTO new_table_name_2(***new-columns***)
SELECT ***old-columns*** FROM old_table_name;

DROP TABLE old_table_name;

/*exec sp_rename 'new_table_name_1', 'old_table_name';*/

/*ALTER TABLE table_3 ADD new_column_name int;*/

/*etc...*/

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

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

بنظرم این کار منطقی تر است.
وجود جداول یک-به-یک شرایط خاص دارد و برای تفکیک و ایزوله بودن بخش های متفاوت و بیربط مهم است وگرنه که من بخواهم فقط کد ملی را در یک جدول جداگانه نگاه دارم که این میشود تئوری جداول دو-ستونه ( شما میتوانید کل دیتابیس را با مجموعه بسیار بسیار زیاد جداول دو ستونه کلید-مقدار طراحی کنید ... )
مثلا یک بخش امنیتی و یک بخش پروفایلی برای کاربران داریم که اغلب هم خیلی با هم درگیر نیستند ولی رابطه یک-به-یک دارند و هرکدام شاید 10 فیلد یا بیشتر داشته باشند.
مقادیر مرتبط با احراز هویت مانند User,Pass,Email,Lockout,AccessFailedCount,SecurityStamp,LastLogin و...و.... و مقادیر پروفایلی مانند FirstName,LastName,Interest,Education,Picture و...و...
یعنی چون کدهای متفاوتی روی این دوبخش کار میکند، ;کتابخانه های dll ای آماده ای برای مدیریت امنیت و جداولش داریم و حتی UI-Page متفاوتی این دوبخش را ویرایش میکنند ( در تیم های برنامه نویسی، شاید افراد متفاوت بخش امنیت و پروفایل را بنویسند) و هر کدام هم فیلدهای زیاد خودشان را دارند، در این حالات شاید تصمیم بر آن شود که دو جدول یک-به-یک ایجاد شود.
وگرنه اینکه بخواهم فقط فیلد ها را دوتا دوتا سه تا سه تا در جداول جدید قرار دهم و آخر هم همیشه مجبورم همه را با هم در یک صفحه نشان دهم و همیشه هم همه را با هم ویرایش کنم و همه را با هم واکشی کنم و در Grid نشان دهم و همه را با هم ... اینطور که فقط کار خودم و کار دیتابیس را پیچیده تر و سنگین تر و کندتر میکنم.

موفق باشید.
1398/02/01 18:54
booysusa

 
درود بر شما سپاس

با توجه به راهنمایی ها و نکات شما ، 3 تا جدول درست کردم
1. جدول اکانت ها
2. جدول اطلاعات
3. جدول دفترچه تلفن (پروژه ای کوچک و جداگانه درون پروژه اصلی هست)

ولی بنظرتون یک دیتابیس جداگانه برای عکس ها و اسناد word و pdf و... نداشته باشم؟ (چگونگی ایجاد رابطه بین آنها را فعلا کار نکردم)

و یک نکته دیگر، بنظرتون ارسال بیش از 110 فیلد اطلاعات به دیتابیس و فراخوانی همه آنها باهم برای ویرایش(frmEditContact) کار درستی هست؟ (برای فرار از ساخت چندین جدول مرتبط باهم اینکار را کرده ام)




نقل قول
وگرنه اینکه بخواهم فقط فیلد ها را دوتا دوتا سه تا سه تا در جداول جدید قرار دهم و آخر هم همیشه مجبورم همه را با هم در یک صفحه نشان دهم و همیشه هم همه را با هم ویرایش کنم و همه را با هم واکشی کنم و در Grid نشان دهم و همه را با هم ... اینطور که فقط کار خودم و کار دیتابیس را پیچیده تر و سنگین تر و کندتر میکنم.

متوجه این جمله نشدم، نمیدانم شما موافق ساخت چند جدول هستید یا مخالف
1398/02/03 9:15
حاجی شریفی
مؤسس سایت
 
سلام
نقل قول نوشته شده توسط: booysusa
ولی بنظرتون یک دیتابیس جداگانه برای عکس ها و اسناد word و pdf و... نداشته باشم؟

بد نیست یک جدول مستقل برای فایل ها داشته باشید. (چه خود فایل ها در دیتابیس باشد و چه نباشد)
این جدول میتوانید فیلدهایی مانند ID,UserID,Name,Date,Size,Data و... داشته باشد.
سپس میتوانید از ID جدول به عنوان دستگیره فایل در جداول دیگر استفاده کنید.
مثلا جدول پرسنلی شما میتوانید یک فیلد PictureID داشته باشد که تصویر کاربر را در جدول فایل مشخص کند ...
و...

نقل قول نوشته شده توسط: booysusa
بنظرتون ارسال بیش از 110 فیلد اطلاعات به دیتابیس و فراخوانی همه آنها باهم برای ویرایش(frmEditContact) کار درستی هست؟

به احتمال قریب به یقین میتوان گفت که دیتابیس را خوب طراحی نکرده اید.
یعنی احتمالا فیلدهای چندگانه ای را به صورت یک به یک ذخیره کرده اید که شده 110 فیلد !
دیتابیس تان نرمال نیست. لینک1 و لینک2

جدول را بازنگری کنید و حداقل مطمئن شوید همه فیلدها با هم رابطه یک-به-یک داشته باشند.
(مثلا شما نباید کتابهای یک نویسنده با اطلاعات خود نویسنده در یک جدول نگاه دارید، چون ذاتا رابطه یک-به-یک ندارند.)

ضمن اینکه احتمالا فیلدهایی دارید که هیچ وقت پرنخواهند شد.
(یک کاری برای جایی انجام دادم، حدود 10 یا 15 سال قبل بود...
به مشتری گفتم فلان فیلد هم اضافه کنم؟ گفت باشد ضرر ندارد؟! ...
همینطوری اضافه کردم آخرش جدول سی و اندی فیلد شد!
یک پنجره هم با تعدادی Tab هم ساختم برای ویرایش آن جدول بزرگ...
در دو سه Report خروجی برنامه هم تاثیر فیلدها مشهود بود...
آخر سر خود مشتری شاکی شد که برنامه خیلی زیاد فیلد دارد و هیچ وقت پرش نمیکنند و اینکه فعلا فلان فیلد را کلا حذف کنم و بردارم ...
آن یکی را هم کلا بردار و...و...
گمانم درنهایت حدود 20 فیلد حذف شد که هیچ وقت از کسی نمیپرسیدند و پرش هم نمی کردند
البته ایراد اولیه از روش تحلیل نیازمندی ها توسط من بود.)


خلاصه آنکه با 110 فیلد ، احتمالا هم فیلدهایی اضافه ای دارید که تا ابد NULL خواهند بود و هم دیتابیس تان خوب نرمال-سازی نشده.

نقل قول نوشته شده توسط: booysusa
متوجه این جمله نشدم، نمیدانم شما موافق ساخت چند جدول هستید یا مخالف

اگر قرار باشد برخی از ستون ها را برخی زمان ها نشان دهید.
ودر ویرایش ها هم فقط برخی ستون ها Update کنید.
شاید داشتن دو جدول یک-به-یک مفید باشد و میتوان به دو جدوله کردن آن فکر است.
یعنی ستون هایتان به دوگروه قابل شکستن باشد که هر بار (SELECT,UPDATE,INSERT) فقط کار با یک بخش برایتان کافی باشد، در یک شرایط میتوانید دو جدول داشته باشید.

ولی

اگر قرار باشد همه ستون ها را با هم نیاز داشته باشید و SELECT کنید و همه را با هم نمایش دهید.
و در ویرایش ها هم همه ستون ها را با هم Update کنید.
وجود دو جدول ایده خوبی نیست و همه ستون ها یک جدول باشد، بهتر است.
یعنی ستون هایتان همیشه با هم در حال (SELECT,UPDATE,INSERT) باشد، در این شرایط یک جدول باشد بهتر است.
1398/02/04 21:53
booysusa

 
درود بر شما

نقل قول
بد نیست یک جدول مستقل برای فایل ها داشته باشید. (چه خود فایل ها در دیتابیس باشد و چه نباشد)

در مورد ذخیره عکس ها قبلا از شما پرسیدم، فرمودید کنار برنامه در یک پوشه ذخیره بشوند بهتر هست تا در یک دیتابیس، من هم سعی میکنم همین کارو کنم

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

سپاس برای لینک ها، مطالعه کردم

نقل قول
ضمن اینکه احتمالا فیلدهایی دارید که هیچ وقت پرنخواهند شد.

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

نقل قول
یعنی ستون هایتان همیشه با هم در حال (SELECT,UPDATE,INSERT) باشد، در این شرایط یک جدول باشد بهتر است.

بله برنامه من اینگونه هست

الان با دستور زیر اطلاعات را در جداول جداگانه می فرستم و درست انجام میشه و در قسمت Insert و ارسال اطلاعات به چند جدول دیگر مشکلی ندارم
public bool Insert()
{
string command = @"INSERT into [Contact] (Name,NameKhanevadegi,Jensiat,ShomarehMeli,TarikhTavalod)
values (@Name,@NameKhanevadegi,@Jensiat,@ShomarehMeli,@TarikhTavalod);
INSERT into [KartMeli] (SerialKartMeli_KartMeli,NoeKartMeli)
values (@SerialKartMeli_KartMeli,@NoeKartMeli)";
List<SqlParameter> parametersList = new List<SqlParameter>();
// اطلاعات شناسنامه
var NameParameter = new SqlParameter("@Name", this.Name);
var NameKhanevadegiParameter = new SqlParameter("@NameKhanevadegi", this.NameKhanevadegi);
var JensiatParameter = new SqlParameter("@Jensiat", Jensiat.ToString());
var ShomarehMeliParameter = new SqlParameter("@ShomarehMeli", this.ShomarehMeli);
var TarikhTavalodParameter = new SqlParameter("@TarikhTavalod", Convert.ToDateTime(TarikhTavalod));
var SerialKartMeli_KartMeliParameter = new SqlParameter("@SerialKartMeli_KartMeli", this.SerialKartMeli_KartMeli);
var NoeKartMeliParameter = new SqlParameter("@NoeKartMeli", NoeKartMeli.ToString());
// شناسنامه
parametersList.Add(NameParameter);
parametersList.Add(NameKhanevadegiParameter);
parametersList.Add(JensiatParameter);
parametersList.Add(ShomarehMeliParameter);
parametersList.Add(TarikhTavalodParameter);
parametersList.Add(SerialKartMeli_KartMeliParameter);
parametersList.Add(NoeKartMeliParameter);
var db = new DataAccess.DatabaseManager();
var result = db.ExecuteCommand(command, parametersList);
return result;
}


ولی دستور Delete درست کار نمی کنه و فقط اطلاعات جدول Contact رو حذف میکنه و اطلاعات جدول KartMeli رو باقی میزاره، بنظرتون مشکل از کجاست؟
دستور Delete من
public bool Delete()
{
try
{
string command = @"delete from [Contact] where ID=@id;" +
@"delete from [KartMeli] where IdKartMeli=@IdKartMeli";
List<SqlParameter> parametersList = new List<SqlParameter>();
var idParameter = new SqlParameter("@id", this.ID);
var IdKartMeliParameter = new SqlParameter("@IdKartMeli", this.IdKartMeli);
parametersList.Add(idParameter);
parametersList.Add(IdKartMeliParameter);
var db = new DataAccess.DatabaseManager();
return db.ExecuteCommand(command, parametersList);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}
}


لینک برنامه من در صورت نیاز برای شما آپلود کردم

سپاسگزارم
1398/02/05 13:10
booysusa

 
در مورد این گفته خودم

نقل قول
ولی دستور Delete درست کار نمی کنه و فقط اطلاعات جدول Contact رو حذف میکنه و اطلاعات جدول KartMeli رو باقی میزاره، بنظرتون مشکل از کجاست؟


وقتی مطلبی که از ویکی پدیا ارسال کردید و مطالعه کردم متوجه شدم من هیچ پیوندی ایجاد نکردم و برای همین نمی توانم با حذف اطلاعات در یک جدول ، همزمان اطلاعات مشترکش باجدول دیگه رو حذف کنم
1398/02/06 22:21
booysusa

 
درود مهندس حاجی شریفی گرامی
سپاس بابت راهنمایی هاتون

اومدم دیتابس رو ویرایش کردم و پیوند بین جداول رو ایجاد کردم.
با Microsoft SQL Server Management Studio 17 دیتابیسم رو باز کردم و بعد که ویرایش روش انجام دادم و Detach کردم
از وقتی که این کارو کردم نمیشه برنامم لود بشه و این خطا رو میده که تصویرش پائین هست
اینو بگم که دیتابیس برنامم رو با خود برنامه ویژوال استودیو ساخته بودم، الان هرکاری میکنم حتی با خود برنامه ویژوال استودیو از قسمت Server Explorer هم اتچ نمیشه


✅چیکار کنم، راهکار چی هست؟؟
1398/02/07 9:15
حاجی شریفی
مؤسس سایت
 
سلام
عضر خواهی میکنم، مجدد چندروزی خیلی سرم شلوغ بود ...
نقل قول نوشته شده توسط: booysusa
ولی دستور Delete ... بنظرتون مشکل از کجاست؟

مطمئن شوید مقدار this.IdKartMeli صحیح و کامل پر شده باشد و عددش در دیتابیس وجود داشته باشد.
درصورتیکه مشکلی مشاهده نکردید، دستور Delete تان را به دو دستور مستقل برای دو جدول بشکنید.
البته Delete را کلا میتوانید به خود دیتابیس هم واگذار کنید.
کافی است درون SQL-Server بین دو جدول Relation ایجاد کنید.
درهنگام ایجاد Relation گزینه ای مشاهده میکنید به نام Delete Action که رفتار دیتابیس با حذف سطر پدر(Contact) را مشخص میکند.
کافی است گزینه Cascade (حذف آبشاری) را انتخاب کنید.
آنگاه با حذف Contact خود دیتابیس سطرهای KartMeli مرتبط را حذف میکند.
این روش خیلی دقیق تر و مطمئن تر است.
در صورت استفاده از این روش ، کلا دیگری نیازی به اجرای دستی دستور Delete دوم نخواهید داشت.

نقل قول نوشته شده توسط: booysusa
الان هرکاری میکنم حتی با خود برنامه ویژوال استودیو از قسمت Server Explorer هم اتچ نمیشه

SQLServer LocalDB, Express قابلیتی دارند که اجازه میدهند دیتابیس را بدون Attach درون برنامه استفاده کنید.
ولی در شرایط واقعی کار با دیتابیس و شبکه و... دیتابیس باید Attach شود.
وقتی دیتابیس Attach شود دو-سه اتفاق رخ میدهد.
اول) تا وقتی دیتابیس Attach است، از طریق ویندوز و فایلی نمیتوانید به فایل دیتابیس دسترسی داشته باشید.
یعنی حتی امکان کپی کردن فایل را هم نخواهید داشت.

دوم) وقتی دیتابیس Attach شود نسخه فایل آن به نسخه SQL-Server جاری ارتقا پیدا کرده و بروز میشود و دیگر در نسخه های پایین تر باز نخواهد شد.
یعنی اگر یکبار دیتابیس را در SQL2017 بیاورید و Attach کنید، دیگر آن دیتابیس در SQL2014 قابل Attach نخواهد بود.

سوم) مجوزهای NTFS روی فایل مربوطه تغییر خواهند کرد

شما در استفاده از SSMS 17 میتوانستید از همان نسخه SQLServer ای که VS201X استفاده میکرد، شما هم استفاده میکردید.
ولی بنظر میرسد با نسخه بالاتری Attach کرده اید.

اما حالا ... !
بروید داخل MyComputer و ببینید میتوانید فایل دیتابیس را کپی کنید یا خیر ؟!
اگر فایل کپی نشد و خطا داد، دیتابیس شما همچنان Attach است و باید Detach کنید.
یا میتوانید به همین صورت Attach فعلی ، هم درون VS201X و هم برنامه تان استفاده کنید ، اگر نیاز است توضیح دهم ...

اگر فایل کپی شد و خطا نداد، احتمالا Version دیتابیس تان ارتقا یافته و زیادتر شده و دیگر به صورتی که قبلا عمل میکردید قابل استفاده نیست.
فایلش را برایم آپلود کنید تا نسخه اش را برایتان کاهش دهم.
یا میتوانید از این به بعد با همان نسخه جدیدتری که در رایانه تان نصب است و در SSMS استفاده کردید، هم در VS201X و هم در برنامه تان کار کنید ، اگر نیاز شد توضیح میدهم ...


شما آزمایش فوق را انجام دهید تا
الف) ببینیم مشکل از Attach است یا Version
ب) و بگویید میخواهید به حالت قبل برگردد یا همینطوری ادامه دهید
تا بعدش را توضیح دهم و با هم حلش کنیم.

موفق باشید.