PDA

View Full Version : چک کردن تکست باکس زمان ثبت اطلاعات در database



saeidghadiri
جمعه 30 مرداد 1394, 13:37 عصر
سلام
من با Linq یه کلاس ساختم بر اساس اون دارم یه فرم به اسم دفترچه تلفن که یک سری داده هست رو به بانک SQL ارسال می کنم با شیوه زیر:


try
{
using (ArshaDBDataContext ArshaDB = new ArshaDBDataContext())
{
Tbl_Phonebook Add = new Tbl_Phonebook();
Add.FirstName = txt_Name.Text;
Add.LastName = txt_Family.Text;
Add.Telephone = txt_TelOne.Text;
Add.Fax = txt_Fax.Text;
Add.Mobile = txt_Mobile.Text;
Add.Email = txt_Mail.Text;
Add.WebSite = txt_WebSite.Text;
Add.Address = txt_Address.Text;
Add.Gender_Name = CB_Gender_PhoneBook.Text;
ArshaDB.Tbl_Phonebooks.InsertOnSubmit(Add);
ArshaDB.SubmitChanges();
MessageBox.Show("اطلاعات با موفقیت ثبت شده است");
}

}
catch (SqlException ex)
{
MessageBox.Show("خطای اتصال به بانک اطلاعاتی" + ex);
}


حالا مشکل اینجا است که اگه تکست باکس ها خالی هم باشد روی دکمه ثبت کلیک کنم یه رکورد ثبت میکنه راهنمایی کنید.

saeidghadiri
جمعه 30 مرداد 1394, 13:47 عصر
یه مورد دیگه اینکه من میخوام برای اون داده هایی که قرار به صورت شماره وارد بانک بشه من اینجا همه رو در طراحی جدول بانک به صورت Nvarchar ذخیره کردم حالا اگه بخوام آیتم های Tel, Fax, Mobile به صورت Numeric باشه نحوه کد نویسی برای ثبت اطلاعات در بانک به چه صورتی میشه؟

134509

shaho.khedri
جمعه 30 مرداد 1394, 15:17 عصر
سلام
من با Linq یه کلاس ساختم بر اساس اون دارم یه فرم به اسم دفترچه تلفن که یک سری داده هست رو به بانک SQL ارسال می کنم با شیوه زیر:


try
{
using (ArshaDBDataContext ArshaDB = new ArshaDBDataContext())
{
Tbl_Phonebook Add = new Tbl_Phonebook();
Add.FirstName = txt_Name.Text;
Add.LastName = txt_Family.Text;
Add.Telephone = txt_TelOne.Text;
Add.Fax = txt_Fax.Text;
Add.Mobile = txt_Mobile.Text;
Add.Email = txt_Mail.Text;
Add.WebSite = txt_WebSite.Text;
Add.Address = txt_Address.Text;
Add.Gender_Name = CB_Gender_PhoneBook.Text;
ArshaDB.Tbl_Phonebooks.InsertOnSubmit(Add);
ArshaDB.SubmitChanges();
MessageBox.Show("اطلاعات با موفقیت ثبت شده است");
}

}
catch (SqlException ex)
{
MessageBox.Show("خطای اتصال به بانک اطلاعاتی" + ex);
}


حالا مشکل اینجا است که اگه تکست باکس ها خالی هم باشد روی دکمه ثبت کلیک کنم یه رکورد ثبت میکنه راهنمایی کنید.
خب یا توی کدات هندلش کن یا توی پایگاه داده ت.
توی کدای برنامه ت که به راحتی با یه if میشه عوض ثبت توی پایگاه داده یه پیغام نمایش بدی
توی پایگاه داده تم هنگام ساخت جدول میتونی بگی این ستون not null باشه که یعنی اینکه مقدار خالی قبول نکنه اینطوری بصورت اتوماتیک exceptionی که catch کردی پیغام میده

shaho.khedri
جمعه 30 مرداد 1394, 15:24 عصر
یه مورد دیگه اینکه من میخوام برای اون داده هایی که قرار به صورت شماره وارد بانک بشه من اینجا همه رو در طراحی جدول بانک به صورت Nvarchar ذخیره کردم حالا اگه بخوام آیتم های Tel, Fax, Mobile به صورت Numeric باشه نحوه کد نویسی برای ثبت اطلاعات در بانک به چه صورتی میشه؟

134509
اینو با پارامتر دهی و استفاده از کلاس SqlDbType حل کن
این شکلی:


string sqlcmd = "Insert into Pictures (ID) Values (@ID)";
insertCommand = new SqlCommand(sqlcmd, conn);
insertCommand.Parameters.Add("ID", SqlDbType.Int).Value = (++lastID);
int queryResult = insertCommand.ExecuteNonQuery();
if (queryResult == 1)
MessageBox.Show("Success");


البته این یه مثال از یکی از پروژه های خودمه فرض کن lastID یه متغیر از نوع int هستش

saeidghadiri
جمعه 30 مرداد 1394, 15:52 عصر
سلام توی بانک not null کردم حالا برنامه رو چطور شرط یزارم براش
و بتونه بفهمه که نام و نام خانوادگی که داره ثبت میشه قبلا تو بانک بوده جدید باید ثبت کنه

saeidghadiri
جمعه 30 مرداد 1394, 15:53 عصر
سلام با روش لینک رو میخواستم توضیح بدید با sqlcommand رو میدونم

hadimtn
جمعه 30 مرداد 1394, 16:54 عصر
سلام
حالا مشکل اینجا است که اگه تکست باکس ها خالی هم باشد روی دکمه ثبت کلیک کنم یه رکورد ثبت میکنه راهنمایی کنید.
همونطور که دوستان گفتن باید شرط بذاری که TextBox خالی نباشه، مثلاً برای سه مورد اول:


if ((txt_Name.Text == "") && (txt_Family.Text == "") && (txt_TelOne.Text == ""))
{
MessageBox.Show("هیچکدام از گزینه ها نباید خالی باشد");
}
else
{
// کد ثبت اطلاعات رو اینجا بذارین
}



یه مورد دیگه اینکه من میخوام برای اون داده هایی که قرار به صورت شماره وارد بانک بشه من اینجا همه رو در طراحی جدول بانک به صورت Nvarchar ذخیره کردم حالا اگه بخوام آیتم های Tel, Fax, Mobile به صورت Numeric باشه نحوه کد نویسی برای ثبت اطلاعات در بانک به چه صورتی میشه؟
نیازی نیست که این مقادیر بصورت عددی در پایگاه داده ثبت بشن، اگر جایی نیاز به این کار بود باید در پایگاه داده نوع متناسب با اون داده رو به فیلد مد نظر بدین؛ مثلاً int، bigint ، ...
وگرنه با کدنویسی نمیتونین نوع رو تغییر بدین، فقط میشه هنگام کار کردن با اون داده نوعش رو عوض، بعد دوباره هنگام ذخیره کردن، به نوع تعیین شده در پایگاه داده تبدیل کنی.
[نمیدونم متوجه منظورتون شدم یا نه؟!]

saeidghadiri
جمعه 30 مرداد 1394, 19:14 عصر
همونطور که دوستان گفتن باید شرط بذاری که TextBox خالی نباشه، مثلاً برای سه مورد اول:


if ((txt_Name.Text == "") && (txt_Family.Text == "") && (txt_TelOne.Text == ""))
{
MessageBox.Show("هیچکدام از گزینه ها نباید خالی باشد");
}
else
{
// کد ثبت اطلاعات رو اینجا بذارین
}



نیازی نیست که این مقادیر بصورت عددی در پایگاه داده ثبت بشن، اگر جایی نیاز به این کار بود باید در پایگاه داده نوع متناسب با اون داده رو به فیلد مد نظر بدین؛ مثلاً int، bigint ، ...
وگرنه با کدنویسی نمیتونین نوع رو تغییر بدین، فقط میشه هنگام کار کردن با اون داده نوعش رو عوض، بعد دوباره هنگام ذخیره کردن، به نوع تعیین شده در پایگاه داده تبدیل کنی.
[نمیدونم متوجه منظورتون شدم یا نه؟!]
سلام ایول قسمت اول با if درست شد. حالا از دیتابیس چه جوری بگم که چک کنه نام و نام خانوادگی تکراری نباشه؟

راجب قسمت دوم بد متوجه شدید

ghasem110deh
جمعه 30 مرداد 1394, 22:11 عصر
روش بهتر واسه چک کردن خالی بودن جعبه متن استفاده از errorProvider هستش ...
و واسه جلوگیری از داده تکراری هم طبیعتا باس اول اون ستون از جدول رو بخونی و با مندرجات تکست باکس مقایسه کنی
تقریبا شبیه جستجو هستش !

hadimtn
شنبه 31 مرداد 1394, 02:20 صبح
حالا از دیتابیس چه جوری بگم که چک کنه نام و نام خانوادگی تکراری نباشه؟
تعریف کلاس LINQ:
LINQDataContext db = new LINQDataContext();
Query مربوط به پیدا کردن شماره تلفن [های] موجود در پایگاه داده با مقدار وارد شده در txt_TelOne:
[YourTables = اسم مربوطه به جدول]
var TelChecker = db.YourTables.SingleOrDefault(t => t.TelePhone == txt_TelOne.Text);
شرط چک کردن جواب داشتن کوئری، که در صورتی که هیچ جوابی نداشت عملیات مورد نظر رو انجام میدی:

if (TelChecker != null)
{
ErrorProvider EP = new ErrorProvider();
EP.SetError(txt_TelOne.Text, "شماره ی وارد شده تکراری میباشد");
}
else
{
// عملیات ثبت
}

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

saeidghadiri
یک شنبه 01 شهریور 1394, 14:07 عصر
روش بهتر واسه چک کردن خالی بودن جعبه متن استفاده از errorProvider هستش ...
و واسه جلوگیری از داده تکراری هم طبیعتا باس اول اون ستون از جدول رو بخونی و با مندرجات تکست باکس مقایسه کنی
تقریبا شبیه جستجو هستش !

سلام راجبش بیشتر لطفا توضیح بده

saeidghadiri
یک شنبه 01 شهریور 1394, 14:09 عصر
تعریف کلاس LINQ:
LINQDataContext db = new LINQDataContext();
Query مربوط به پیدا کردن شماره تلفن [های] موجود در پایگاه داده با مقدار وارد شده در txt_TelOne:
[YourTables = اسم مربوطه به جدول]
var TelChecker = db.YourTables.SingleOrDefault(t => t.TelePhone == txt_TelOne.Text);
شرط چک کردن جواب داشتن کوئری، که در صورتی که هیچ جوابی نداشت عملیات مورد نظر رو انجام میدی:

if (TelChecker != null)
{
ErrorProvider EP = new ErrorProvider();
EP.SetError(txt_TelOne.Text, "شماره ی وارد شده تکراری میباشد");
}
else
{
// عملیات ثبت
}

اگه جوابتون رو نگرفتین دوباره، کمی واضح تر مطرح کنین تا دوستان پاسخ بدن!

سلام این کد رو تو قسمت ثبت اطلاعات باید بزارم درسته؟

saeidghadiri
یک شنبه 01 شهریور 1394, 14:17 عصر
یعنی اینجا؟

try
{

//این قسمت به علت اینکه درست کار نمی کرد رو کامنت کردم
/*if ((txt_Name.Text == "") && (txt_Family.Text == "") &&
(txt_TelOne.Text == "") && (txt_Fax.Text == "") &&
(txt_Mobile.Text == "") && (txt_Mail.Text == "") &&
(txt_WebSite.Text == "") && (txt_Address.Text == "") &&
(radComboBox_PhoneBook.Text == ""))
{
FMessegeBox.FarsiMessegeBox.Show("گزینه ها را تکمیل نمایید.", "خطا", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Error);
}*/

// به جای قسمت بالا از روش ارور پرووایدر استفاده کردم
if (string.IsNullOrWhiteSpace(radComboBox_PhoneBook.T ext))
errorProvider1.SetError(radComboBox_PhoneBook, "لطفا نوع جنسیت را وارد کنید");

if (string.IsNullOrWhiteSpace(txt_Name.Text))
errorProvider1.SetError(txt_Name, "لطفا نام را وارد کنید");

// مشکل اینجاست که بعد از پر کردن تکست باکس علامت ارور نمی رود!!!!!


else
{
# region add
using (ArshaDBDataContext ArshaDB = new ArshaDBDataContext())
{
//System.IO.MemoryStream ms = new System.IO.MemoryStream();
Tbl_Phonebook Add = new Tbl_Phonebook();

Add.FirstName = txt_Name.Text;
Add.LastName = txt_Family.Text;
Add.Telephone = txt_TelOne.Text;
Add.Fax = txt_Fax.Text;
Add.Mobile = txt_Mobile.Text;
Add.Email = txt_Mail.Text;
Add.WebSite = txt_WebSite.Text;
Add.Address = txt_Address.Text;
//Add.Image = ImageToByte(PB_IMG.Image); این قسمت رو بلد نیستم نمی تونم عکس رو با بقیه فیلدها ثبت کنم
//Add.DateTime = ... این قسمت هم مربوط به تاریخ ثبت اطلاعاته که بلد نیستم.
Add.Gender_Name = radComboBox_PhoneBook.Text;
ArshaDB.Tbl_Phonebooks.InsertOnSubmit(Add);
ArshaDB.SubmitChanges();
//MessageBox.Show("اطلاعات با موفقیت ثبت شده است");
FMessegeBox.FarsiMessegeBox.Show("اطلاعات شما با موفقیت در بانک اطلاعاتی ثبت شده است.", "ثبت اطلاعات", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
errorProvider1.Clear();
radComboBox_PhoneBook.ResetText();
txt_Name.Text = "";
txt_Family.Text = "";
txt_TelOne.Text = "";
txt_Fax.Text = "";
txt_Mobile.Text = "";
txt_Mail.Text = "";
txt_WebSite.Text = "";
txt_Address.Text = "";
//radDateTimePicker1.Text = "";
//B_IMG.Refresh();
dgvRefresh();
//DGVPhoneBook();
}
# endregion
}
}
catch (SqlException ex)
{
MessageBox.Show("خطای اتصال به بانک اطلاعاتی" + ex);
}

hadimtn
یک شنبه 01 شهریور 1394, 15:54 عصر
سلام این کد رو تو قسمت ثبت اطلاعات باید بزارم درسته؟
مشخص شده!
داخل دکمه ی ثبت، کدی که اطلاعات رو ثبت میکنه داخل else بذار !

hadimtn
یک شنبه 01 شهریور 1394, 16:03 عصر
//این قسمت به علت اینکه درست کار نمی کرد رو کامنت کردم
/*if ((txt_Name.Text == "") && (txt_Family.Text == "") &&
(txt_TelOne.Text == "") && (txt_Fax.Text == "") &&
(txt_Mobile.Text == "") && (txt_Mail.Text == "") &&
(txt_WebSite.Text == "") && (txt_Address.Text == "") &&
(radComboBox_PhoneBook.Text == ""))
{
FMessegeBox.FarsiMessegeBox.Show("گزینه ها را تکمیل نمایید.", "خطا", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Error);
}*/

احتمالاً تو این قسمت ComboBox مقدار داره که نه خطا میده نه اجر میشه!



// به جای قسمت بالا از روش ارور پرووایدر استفاده کردم
if (string.IsNullOrWhiteSpace(radComboBox_PhoneBook.T ext))
errorProvider1.SetError(radComboBox_PhoneBook, "لطفا نوع جنسیت را وارد کنید");
if (string.IsNullOrWhiteSpace(txt_Name.Text))
errorProvider1.SetError(txt_Name, "لطفا نام را وارد کنید");
// مشکل اینجاست که بعد از پر کردن تکست باکس علامت ارور نمی رود!!!!!

باید متوجه‌ش کنی که پاک کنه دیگه ... :لبخندساده:
میتونی داخل رویداد TextChange کنترل مد نظر (TextBox یا ComboBox) آیکن errorprovide1 رو پاک کنی:
errorProvider1.Clear();

saeidghadiri
دوشنبه 02 شهریور 1394, 06:22 صبح
احتمالاً تو این قسمت ComboBox مقدار داره که نه خطا میده نه اجر میشه!

من combobox رو با DataSource ست کردم و دیتا Gender رو از یه جدول دیگه میخونه اما زمانی که فرم رو اجرا می کنم فوری خودش میره روی آیتم اول که " مرد " هست میشینه!




باید متوجه‌ش کنی که پاک کنه دیگه ... :لبخندساده:
میتونی داخل رویداد TextChange کنترل مد نظر (TextBox یا ComboBox) آیکن errorprovide1 رو پاک کنی:
errorProvider1.Clear();

با اینکار بهش می گم بعداز پر شدن دیگه آیکن رو نمایش نده درسته؟

saeidghadiri
دوشنبه 02 شهریور 1394, 06:23 صبح
احتمالاً تو این قسمت ComboBox مقدار داره که نه خطا میده نه اجر میشه!


باید متوجه‌ش کنی که پاک کنه دیگه ... :لبخندساده:
میتونی داخل رویداد TextChange کنترل مد نظر (TextBox یا ComboBox) آیکن errorprovide1 رو پاک کنی:
errorProvider1.Clear();


من combobox رو با DataSource ست کردم و دیتا Gender رو از یه جدول دیگه میخونه اما زمانی که فرم رو اجرا می کنم فوری خودش میره روی آیتم اول که " مرد " هست میشینه!

hadimtn
دوشنبه 02 شهریور 1394, 15:35 عصر
با اینکار بهش می گم بعداز پر شدن دیگه آیکن رو نمایش نده درسته؟
بله! اگه تو رویداد TextChange بنویسی، متد Clear() بعد از تایپ اولین حرف، آیکن errorProvider رو پاک می‌کنه!



من combobox رو با DataSource ست کردم و دیتا Gender رو از یه جدول دیگه میخونه اما زمانی که فرم رو اجرا می کنم فوری خودش میره روی آیتم اول که " مرد " هست میشینه!
اگر برای ورود مخاطب به پایگاه داده است برای انتخاب کردن جنسیت نیازی به ذخیره در جدول ندارد، از قسمت Properties مربوط به ComboBox خصوصیت Items گزینه‌ها رو اضافه کن، در اینصورت شرط زیر جواب خواهد داد:
if (comboBox1.Text == "")
{
errorProvider1.SetError(ComboBox1, "جنسیت را انتخاب کنید");
}

ولی اگه نیاز داری ستونی از یک جدول در پایگاه داده رو تحت شرایط خاصی به ComboBox وصل (Bind) کنی، از یک Query مثل این باید استفاده کنی:
var query = (from c in db.ObjectTables select c.ObjectName).Distinct().OrderBy(item => item).ToList();
query.Insert(0,"انتخاب کنید");
که در اینصورت اولین گزینه "انتخاب کنید"، می‌باشد که به جای بررسی کردن خالی بودن ComboBox، باید بررسی کنی ببینی کاربر گزینه‌ای انتخاب کرده یا نه:
if (comboBox1.Text == "انتخاب کنید")
{
errorProvider1.SetError(ComboBox1, "جنسیت را انتخاب کنید");
}

saeidghadiri
سه شنبه 03 شهریور 1394, 19:15 عصر
اینو با پارامتر دهی و استفاده از کلاس SqlDbType حل کن
این شکلی:


string sqlcmd = "Insert into Pictures (ID) Values (@ID)";
insertCommand = new SqlCommand(sqlcmd, conn);
insertCommand.Parameters.Add("ID", SqlDbType.Int).Value = (++lastID);
int queryResult = insertCommand.ExecuteNonQuery();
if (queryResult == 1)
MessageBox.Show("Success");


البته این یه مثال از یکی از پروژه های خودمه فرض کن lastID یه متغیر از نوع int هستش

سلام منظورتون رو نفهمیدم امکان داره بیشتر توضیح بدی برام.

saeidghadiri
سه شنبه 03 شهریور 1394, 19:44 عصر
بله! اگه تو رویداد TextChange بنویسی، متد Clear() بعد از تایپ اولین حرف، آیکن errorProvider رو پاک می‌کنه!



اگر برای ورود مخاطب به پایگاه داده است برای انتخاب کردن جنسیت نیازی به ذخیره در جدول ندارد، از قسمت Properties مربوط به ComboBox خصوصیت Items گزینه‌ها رو اضافه کن، در اینصورت شرط زیر جواب خواهد داد:
if (comboBox1.Text == "")
{
errorProvider1.SetError(ComboBox1, "جنسیت را انتخاب کنید");
}

ولی اگه نیاز داری ستونی از یک جدول در پایگاه داده رو تحت شرایط خاصی به ComboBox وصل (Bind) کنی، از یک Query مثل این باید استفاده کنی:
var query = (from c in db.ObjectTables select c.ObjectName).Distinct().OrderBy(item => item).ToList();
query.Insert(0,"انتخاب کنید");
که در اینصورت اولین گزینه "انتخاب کنید"، می‌باشد که به جای بررسی کردن خالی بودن ComboBox، باید بررسی کنی ببینی کاربر گزینه‌ای انتخاب کرده یا نه:
if (comboBox1.Text == "انتخاب کنید")
{
errorProvider1.SetError(ComboBox1, "جنسیت را انتخاب کنید");
}

سلام خیلی دستت دلد نکند!!
اگه نخوام یه کمبو رو با دیتاسورس از Properti ست کنم به یه جدول دیگه از دیتابیسم چه کاری رو باید انجام بدم؟ یعنی با کد باشه و LINQ؟

نه حتما می خوام تو دیتابیس ثبت بشه چون می خوام خروجی به فایل excelبراش بنویسم (که این رو هم مشکل دارم => خروجی به فایل) تا بتونم تفکیک جنسیت انجام بدم.

saeidghadiri
سه شنبه 03 شهریور 1394, 19:47 عصر
مشخص شده!
داخل دکمه ی ثبت، کدی که اطلاعات رو ثبت میکنه داخل else بذار !

سلام خوبین ببین من تو دکمه ثبت که کد رو وارد می کنم به کد Error گیر میده خطا میگیره. زیرش خط قرمز میشه نمیشناستش.