PDA

View Full Version : سوال: ارسال اطلاعات یک فرم به دو جدول در database



booysusa
دوشنبه 02 اردیبهشت 1398, 21:43 عصر
درود و خداقوت همگی
کلی تو نت سرچ کردم و کلی اموزش دیدم و کلی سورس دانلود کردم ولی نتونستم پیش برم
من یک برنامه ساده دارم (عملیات Insert) به درستی کار می کند ولی فقط به یک جدول ارسال میشود.
میخوام اطلاعات شناسنامه را از فرم شناسنامه به جدول Contact و اطلاعات کارت ملی رو از فرم کارت ملی به جدول KartMeli ارسال کنم

ولی هرکاری میکنم فقط میتونم اطلاعات رو به یک جدول (Contact) ارسال کنم (شیوه ارسال اطلاعات به جداول جداگانه و ارتباط بین جداول را علارغم تلاش های بسیار هنوز یاد نگرفتم)
اگر امکانش هست برنامه را بررسی کنید و در این زمینه راهنمای ام کنید (در صورت امکان به شیوه کد نویسی من راهنمایی ام کنید)
سپاس
لینک دانلود برنامه (http://s9.picofile.com/file/8357026784/CafeManagement_1398_01_14_Rahnamaii.zip.html)



تصاویر برنامه
1. فرم اطلاعات شناسنامه
http://s9.picofile.com/file/8358249518/01.PNG

2. فرم اطلاعات کارت ملی
http://s9.picofile.com/file/8358249526/02.PNG

3. محیط دیتابیس
http://s8.picofile.com/file/8358249534/03.PNG


اطلاعات برنامه:
ویژوال استودیو 2015
سی شارپ
دیتابیس اس کیو ال اکسپرس (بانک اطلاعاتی رو با خود برنامه ویژوال استودیو 2015 ساختم)

davidrobert
دوشنبه 02 اردیبهشت 1398, 21:56 عصر
برای ذخیره به دیتابیس اگه اولی جواب گرفتید مطمئن باش دومی به جواب میرسید چون برای اولی جداگانه ذخیره رو درون یک دکمه نوشتید دوباره همون دستور ذخیره از اول برای همون دکمه بعد از جدول اول بنویسید یعنی دو بار دستور ذخیره بنویسید کامل یک بار برای جدول اول و یک بار برای جدول دوم و وقتی روی دکمه بزنید به ترتیب میره دستورات دیتابیس بررسی و ثبت میکنه.
الان کدنویسی شما رو دیدم خیلی خوب هستش.
دارید ADO کار میکنید ولی یه مورد اون سورس دفتر تلفن که به شما دادم اون حتما دانلود کنید اونم با ADO هستش ولی خیلی کمتر شده یعنی یک پارامتر شده نمایش و جستجو
و یک پارامتر شده ذخیره، ویرایش و حذف برای کل برنامه و نیاز به نوشتم دستورات تکراری ADO نیست با دو تا پرامتر حتی بزرگترین سایت و نرم افزار کنترول میکنید. و دوم سعی کنید از StringBuilder استفاده کنید خیلی کمک میکنه همه پیام ها باهم تو یک ظرف جمع میکنید و در آخر همه رو باهم ولی زیر هم نشان میدید تا کاربر دونه به دونه همه رو بررسی و رفع کنه این طوری کدنویسی شما هم کمتر میشه.
یه کد تشخیص کد ملی هم قرار بده به همراه یک چک باکس ملیت یعنی اگه ایرانی بود کد ملی باید درست بده اگه ایرانی نبود به کد ملی سخت نگیره فقط ببینه تکراری نباشه.

booysusa
سه شنبه 03 اردیبهشت 1398, 09:47 صبح
برای ذخیره به دیتابیس اگه اولی جواب گرفتید مطمئن باش دومی به جواب میرسید
سپاس بابت دلگرامی


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


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

ولی در ارسال اطلاعات دو فرم باهم و همچنین پیوند جداول باهم مشکل دارم

این هم کدهای دکمه Insert من

public bool Insert()
{
string command = "INSERT into [Contact] (Name,NameKhanevadegi,Jensiat,ShomarehMeli,TarikhT avalod) values (@Name,@NameKhanevadegi,@Jensiat,@ShomarehMeli,@Ta rikhTavalod)";
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));

// شناسنامه
parametersList.Add(NameParameter);
parametersList.Add(NameKhanevadegiParameter);
parametersList.Add(JensiatParameter);
parametersList.Add(ShomarehMeliParameter);
parametersList.Add(TarikhTavalodParameter);

var db = new DataAccess.DatabaseManager();
var result = db.ExecuteCommand(command, parametersList);
return result;




//======= مشکل من این هست که میخوام اطلاعات شناسنامه و کارت ملی در دو جدول جداگانه درج بشن
//======= و ارتباط بین آنها آیدی باشد، زمانی که میخوام یک سطر را در دیتاگرید ویوو حذف کنم همزمان همه اطلاعات مربوط به اون آیدی در تمامی جداول دیتابیس حذف شوند

// اینجا مشکل دارم، نمیدونم چطوری باید اطلاعات زیر رو به جدول کارت ملی ارسال کنم
string command2 = "INSERT into [KartMeli] (SerialKartMeli_KartMeli,NoeKartMeli) values (@SerialKartMeli_KartMeli,@NoeKartMeli)";
List<SqlParameter> parametersList2 = new List<SqlParameter>();

// کارت ملی
var SerialKartMeli_KartMeliParameter = new SqlParameter("@SerialKartMeli_KartMeli", this.SerialKartMeli_KartMeli);
var NoeKartMeliParameter = new SqlParameter("@NoeKartMeli", NoeKartMeli.ToString());

// کارت ملی
parametersList2.Add(SerialKartMeli_KartMeliParamet er);
parametersList2.Add(NoeKartMeliParameter);


var db2 = new DataAccess.DatabaseManager();
var result2 = db2.ExecuteCommand(command2, parametersList2);
return result2;
}

رامین مرادی
سه شنبه 03 اردیبهشت 1398, 12:54 عصر
سلام.
نیازی به دوباره کاری نیست .
تو همون سطری که دستور اینسرت رو نوشتید اینسرت دوم رو هم بنویسید.دستورات رو با ; از هم جدا کنید مانند کد زیر




string command = @"INSERT into [Contact] (Name,NameKhanevadegi,Jensiat,ShomarehMeli,TarikhT avalod)
values (@Name,@NameKhanevadegi,@Jensiat,@ShomarehMeli,@Ta rikhTavalod);
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_KartMeliParamete r);
parametersList.Add(NoeKartMeliParameter);

var db = new DataAccess.DatabaseManager();
var result = db.ExecuteCommand(command, parametersList);
return result;







در ضمن تو این دوتا جدول پیوندتون چی هست من چیزی نمیبینم:متفکر:!!
.

وقتی تو خود اس کیو ال جداول رو به هم ارتباط میدید و دیاگرامشو تولید میکنید یه قسمتی داره که اگه انتخاب کنید وقتی از جدول والد اطلاعاتی حذف میشه در جداولی که به اون جدول اصلی ارتباط دارند نیز اطلاعات حذف میشن. الان دقیق حضور ذهن ندارم چیزی به اسم specif...(احتمال زیاد املاش غلط نوشتم :لبخند:) بود اگه اشتباه نکنم.دنبال گزینه delete rule بگرد.

booysusa
سه شنبه 03 اردیبهشت 1398, 13:31 عصر
تو همون سطری که دستور اینسرت رو نوشتید اینسرت دوم رو هم بنویسید.دستورات رو با ; از هم جدا کنید مانند کد زیر
سپاسگزارم جناب مرادی، درست شد:تشویق::قلب:



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


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

booysusa
سه شنبه 03 اردیبهشت 1398, 20:06 عصر
وقتی تو خود اس کیو ال جداول رو به هم ارتباط میدید و دیاگرامشو تولید میکنید یه قسمتی داره که اگه انتخاب کنید وقتی از جدول والد اطلاعاتی حذف میشه در جداولی که به اون جدول اصلی ارتباط دارند نیز اطلاعات حذف میشن. الان دقیق حضور ذهن ندارم چیزی به اسم specif...(احتمال زیاد املاش غلط نوشتم :لبخند:) بود اگه اشتباه نکنم.دنبال گزینه delete rule بگرد.


جناب مرادی کد Delete من اینگونه هست
ولی مشکل اینجاست که با کدپائین فقط اطلاعات جدول Contact حذف میشود و اطلاعات موجود در جدول کارت ملی باقی می مانند


public bool Delete()
{
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();
var result = db.ExecuteCommand(command, parametersList);
return result;
}

رامین مرادی
چهارشنبه 04 اردیبهشت 1398, 08:46 صبح
جناب مرادی کد Delete من اینگونه هست
ولی مشکل اینجاست که با کدپائین فقط اطلاعات جدول Contact حذف میشود و اطلاعات موجود در جدول کارت ملی باقی می مانند


public bool Delete()
{
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();
var result = db.ExecuteCommand(command, parametersList);
return result;
}
قبل از دیلیت دوم ; بزارید.

booysusa
چهارشنبه 04 اردیبهشت 1398, 18:44 عصر
قبل از دیلیت دوم ; بزارید.

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

http://s9.picofile.com/file/8358445900/04.JPG

booysusa
چهارشنبه 04 اردیبهشت 1398, 19:25 عصر
کلا حتی اگر خط اول جدول KartMeli رو تنها بزارم جلوی استرینگ بازم نمیشه اطلاعات جدول را حذف کنم، ولی براحتی اطلاعات جدول Contact رو با کد
@"delete from [Contact] where ID=@id حذف میکنه
نمی دونم کجا رو اشتباه رفتم

booysusa
چهارشنبه 04 اردیبهشت 1398, 21:24 عصر
قبل از دیلیت دوم ; بزارید.

لینک دانلود برنامه رو برای شما آپلودم کردم در صورت امکان دانلود و بررسی کنید سپاس (http://s9.picofile.com/file/8358450292/CafeShopManagement_1398_01_14_Rahnamaii.zip.html)

Mahmoud.Afrad
چهارشنبه 04 اردیبهشت 1398, 23:33 عصر
سوال بنده این هست که اصلا چرا دو جدول برای چنین داده هایی ایجاد کرده اید؟!

booysusa
پنج شنبه 05 اردیبهشت 1398, 08:49 صبح
سوال بنده این هست که اصلا چرا دو جدول برای چنین داده هایی ایجاد کرده اید؟!

منظور شما رو {چنین داده هایی} متوجه نشدم
اگر منظورتون این هست که میشود همه این داده ها را در یک جدول گذاشت، این یک برنامه تست هست و در حال تکمیل برنامه اصلی با همین شیوه کدنویسی هستم، برنامه اصلی فیلدهایی به مراتب بیشتر دارد


برنامه من در فرم frmNewContact بیش از 150 فیلد داده دارد، بنظر شما هم آن ها را در یک جدول قرار دهم یا اطلاعات مربوط به دانشگاه در یک جدول، اطلاعات مربوط به شناسنامه در یک جدول و...

Mahmoud.Afrad
پنج شنبه 05 اردیبهشت 1398, 11:07 صبح
منظور شما رو {چنین داده هایی} متوجه نشدم
اگر منظورتون این هست که میشود همه این داده ها را در یک جدول گذاشت، این یک برنامه تست هست و در حال تکمیل برنامه اصلی با همین شیوه کدنویسی هستم، برنامه اصلی فیلدهایی به مراتب بیشتر دارد


برنامه من در فرم frmNewContact بیش از 150 فیلد داده دارد، بنظر شما هم آن ها را در یک جدول قرار دهم یا اطلاعات مربوط به دانشگاه در یک جدول، اطلاعات مربوط به شناسنامه در یک جدول و...

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

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



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

booysusa
پنج شنبه 05 اردیبهشت 1398, 13:17 عصر
قبل از دیلیت دوم ; بزارید.

سپاس
متوجه شدم که من هیچگونه پیوندی بین جداولم ایجاد نکرده ام برای همین عملیات حذف انجام نمی شد.
الان در حال کار بر روی ایجاد پیوند جداول هستم

booysusa
جمعه 06 اردیبهشت 1398, 21:57 عصر
درود مهندس

سپاس بابت راهنمایی هاتون



اومدم دیتابس رو ویرایش کردم و پیوند بین جداول رو ایجاد کردم.

با Microsoft SQL Server Management Studio 17 دیتابیسم رو باز کردم و بعد که ویرایش روش انجام دادم و Detach کردم

از وقتی که این کارو کردم نمیشه برنامم لود بشه و این خطا رو میده که تصویرش پائین هست
اینو بگم که دیتابیس برنامم رو با خود برنامه ویژوال استودیو ساخته بودم، الان هرکاری میکنم حتی با خود برنامه ویژوال استودیو از قسمت Server Explorer هم اتچ نمیشه
http://s9.picofile.com/file/8358647768/05.jpg

✅چیکار کنم، راهکار چی هست؟؟

booysusa
شنبه 07 اردیبهشت 1398, 13:15 عصر
درود مهندس

سپاس بابت راهنمایی هاتون



اومدم دیتابس رو ویرایش کردم و پیوند بین جداول رو ایجاد کردم.

با Microsoft SQL Server Management Studio 17 دیتابیسم رو باز کردم و بعد که ویرایش روش انجام دادم و Detach کردم

از وقتی که این کارو کردم نمیشه برنامم لود بشه و این خطا رو میده که تصویرش پائین هست
اینو بگم که دیتابیس برنامم رو با خود برنامه ویژوال استودیو ساخته بودم، الان هرکاری میکنم حتی با خود برنامه ویژوال استودیو از قسمت Server Explorer هم اتچ نمیشه
http://s9.picofile.com/file/8358647768/05.jpg

✅چیکار کنم، راهکار چی هست؟؟









بررسی کردم در لیست دیتابیس های منجمنت استودیو نبود ولی یه لحظه به فکر آدرس کانکشن استرینگ افتادم، رفتم و از پروپرتی خود دیتابیس اتچ شده به ویژوال استودیو از بخش Server Explorer آدرس کپی کردم و قرار دادم درست شد

بسیار سپاس





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

mr.sirwan
شنبه 07 اردیبهشت 1398, 15:11 عصر
ولی همچنان در طراحی دیتابیس(پیوند جداول موندم) البته دارم روش کار می کنم ببینم راهی پیدا می کنم یا خیر

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

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

booysusa
یک شنبه 08 اردیبهشت 1398, 10:57 صبح
دوست عزیز امیدوارم از این حرف من ناراحت نشی، اما به جای اینکه سوالات و مشکلات ابتدایی رو اینجا مطرح کنین به نظرم بهتره اول برین یه آموزش کامل تحلیل و طراحی دیتابیس رو بگذرونین، چون طراحی دیتابیس و پیوند جداول و نرمال سازی اطلاعات از ابتدایی ترین چیزهاییه که یه برنامه نویس باید بلد باشه حالا مسلما یکسری مشکلات و سوال در حین کار پیش میاد، اشکالی نداره اما اینکه برای هر سمیکالن یا کوتیشن قرار ندادن یا بلد نبودن ایجاد ریلیشن بین جداول بیاین تاپیک ایجاد کنین زیاد جالب نیست

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


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