PDA

View Full Version : سوال: خطا در ذحیره اطلاعات وقتی فیلدی حالی باشد



lovee20002002
دوشنبه 16 اردیبهشت 1392, 11:21 صبح
سلام دو ستان من با لینک میخوام یک سری فیلدو ذخیره کنم چند تا از تکس باکسام خالی هستن در بعضی مواقع تو دیتابیشم null میتونن باشن ولی وقتی با فیلد خالی سیو میکنم این اررور رو میده
Input string was not in a correct format.
در صورتی که وقتی پرن ارروری ندارم
مشکل از کجاست

sayvan
دوشنبه 16 اردیبهشت 1392, 11:28 صبح
اگه نوع فیلدات عددی باشه نبایدم قبول کنه
اگه رشته ایین نوع داده ایی nvarchar براش انتخاب کن
فک نکنم مشکلی پیش بیاد

lovee20002002
دوشنبه 16 اردیبهشت 1392, 11:33 صبح
نوع داده ها int هست وقتی میخوام سیو کنم convert.toint32 میکنم باید حتما عددی سیو کنم چکار کنم درست بشه؟

sayvan
دوشنبه 16 اردیبهشت 1392, 11:35 صبح
مشکل همینجاست دیگه به تکست باکس هات عدد صفربده به صورت پیش فرض
خاصیت text شون درو صفر بزار درست میشه

veniz2008
دوشنبه 16 اردیبهشت 1392, 12:52 عصر
نوع داده ها int هست وقتی میخوام سیو کنم convert.toint32 میکنم باید حتما عددی سیو کنم چکار کنم درست بشه؟
سلام.
اگر اون فیلد int حتما بایستی در جدول مقدار بگیره که در اینصورت کافیه که چک کنید مقدار تکست باکس خالی نباشه و همچنین فقط عدد وارد شده باشه. یعنی فقط بحث اعتبارسنجی رو باید رعایت کنید.
اما فرض کنید یک فیلد نوع int امکان خالی بودن رو داشته باشه. در این حالت برای شما ممکنه دو حالت مهم باشه. یکی اینکه مثلا اگر کاربر مقداری رو وارد نکرد به جاش 0 ثبت کنی که باز هم کافیه فقط مقدار خالی تکست باکس رو براش بفرستی. در این حالت، sql مقدار اون فیلد رو 0 در نظر میگیره . فقط یادتون باشه که نباید از convert.toint32 استفاده کنید چون خطایی رو میده که الان باهاش برخورد کردید. دقیقا مثل یک فیلد رشته ای باهاش برخورد کنید.
اما ممکنه شما نخواید که 0 ثبت کنید و دوست دارید که اگر کاربر برای اون فیلد مقداری وارد نکرد در جدول شما Null ثبت بشه. در اینصورت با یک if و else براحتی میتونید این کار رو انجام بدید. من کد این حالت رو براتون میزارم تا بهتر متوجه منظور من بشید. در جدول من سال تولد از نوع int هست و امکان خالی بودنش وجود داره. اگر کاربر مقدار رو وارد نکنه با استفاده از DBNull.Value مقدار Null رو برای جدولم میفرستم و اینطوری دیگه مجبور نیستم 0 وارد کنم.

SqlConnection con = new SqlConnection("server = .\\md2008;database = Test1;Integrated Security = True");
SqlCommand cmd = new SqlCommand("AddStudent", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@firstname", TxtName.Text.Trim());
cmd.Parameters.AddWithValue("@lastname", TxtFamily.Text);
if (string.IsNullOrWhiteSpace(TxtBirthDay.Text))
{
cmd.Parameters.AddWithValue("@birthday", DBNull.Value);
}
else
{
cmd.Parameters.AddWithValue("@birthday", TxtBirthDay.Text);
}
cmd.Parameters.AddWithValue("@gender", CmbGender.SelectedIndex);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
موفق باشید.