PDA

View Full Version : سوال: پیغام The conversion of the nvarchar value '3980106195' overflowed an int column



دلتنگ اسمان
شنبه 21 تیر 1393, 11:51 صبح
با سلام
جداولم رو در sql 2008 طراحی کردم.حالا وقتی اطلاعات رو وارد کردم وقتی به تعداد 9 نفر رسید نفر دهم رو خطای
The conversion of the nvarchar value '3980106195' overflowed an int columnمیده.
اون شماره ای هم که وسط پیغامه کد ملی نفر نهم هستش.کلید اصلی جدول کدملی افراده .
ممنون

mz6488
شنبه 21 تیر 1393, 11:53 صبح
محظ احتیاط مقدار فضا رو بیشتر کن

دلتنگ اسمان
شنبه 21 تیر 1393, 12:01 عصر
data type =nchar(10 بود. کردمش 20. اما حالا تغییرات ذخیره نمیشن. باید جدول رو از اول طراحی کنم و داده ها رو دوباره وارد کنم؟!

hamid_hr
شنبه 21 تیر 1393, 12:01 عصر
کد ملی رو تو دیتابیس چه نوعی در نظر گرفتین براش؟

دلتنگ اسمان
شنبه 21 تیر 1393, 12:03 عصر
کد ملی رو تو دیتابیس چه نوعی در نظر گرفتین براش؟
nchar10 بود که حالا nchar 20 کردم ولی ذخیره نمیشه

دلتنگ اسمان
شنبه 21 تیر 1393, 12:18 عصر
این فرد رو حذف کردم و افراد دیگر رو ثبت کردم مشکلی نداره. اما هر موقع این کد ملی (3980106195)رو ثبت میکنم نفر بعدی رو خطا میده!!!

محمد آشتیانی
شنبه 21 تیر 1393, 12:28 عصر
سلام
اگه به متن خطا دقت کنی موقع تبدیل این عدد از nvarchar به int داره خطا میده ، و علتش اینه که این عدد از محدوده int بزرگتره

دلتنگ اسمان
شنبه 21 تیر 1393, 12:34 عصر
سلام
اگه به متن خطا دقت کنی موقع تبدیل این عدد از nvarchar به int داره خطا میده ، و علتش اینه که این عدد از محدوده int بزرگتره

اخه جایی به int تبدیل نمیشه. اصلا nvarchar هم تعریف نشده.
نوعش در جدول nchar 10 بود که الان به nchar20 تبدیل کردم. و موقع خواندن از تکس باکس هم که همانطور که خونده میشه ذخیره میشه. یعنی به چیزی تبدیل نمیشه.

دلتنگ اسمان
شنبه 21 تیر 1393, 13:23 عصر
چرا در موقع ثبت این کد ملی (3980106195)خطایی صادر نمیشه بلکه زمانی که نفر بعد از این رو میخوام ثبت کنم خطا میده.
البته این خطا هم زمانی اتفاق میفته که وقتی نفر بعد از این رو میخوام ثبت کنم اول چک میکنه که ایا این کد ملی قبلا ثبت شده یا نه.

string query = "SELECT codemelli from personal WHERE codemelli=" + nationalCode;

SqlCommand.CommandText = query;
SqlCommand.Connection = sqlconnection;
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = SqlCommand;
DataTable dt = new DataTable();
sda.Fill(dt);

sqlconnection.Close();


if (dt.Rows.Count != 0)
{
که در دستور Fill خطا میده. یعنی وقتی به این کد ملی(3980106195) میرسه خطا میده.

mz6488
شنبه 21 تیر 1393, 14:15 عصر
کلا داده nchar بدی که داره اینکه اگه فرضا اندازه ش رو 20 در نظر گرفتین و از این 20 تا فقط از 10 تا استفاده کنید مابقی فضا رو کاراکتر خالی قرار میده که ممکن مشکل ساز بشه.داده رو از نوع nvarchar(12) تعربف کنید اگه موقع ذخیره خطا داد اول برید دیتای این ستون از جدول رو پاک کنید بعد برید به قسمت زیر
Tools/oprtions/Designers/Table and Database Designer
حالا تیک فکر کنم prevent... بود رو بردارید

plus
شنبه 21 تیر 1393, 14:27 عصر
شما مقدار CHAR، VARCHAR و ... رو میخواین در SQL استفاده کنین باید از Quotation استفاده کنید و گرنه SQL ارفام رو به عنوان عدد در نظر میگیره:

string query = string.Format("SELECT codemelli from personal WHERE codemelli='{0}'", nationalCode);

دلتنگ اسمان
شنبه 21 تیر 1393, 16:22 عصر
شما مقدار CHAR، VARCHAR و ... رو میخواین در SQL استفاده کنین باید از Quotation استفاده کنید و گرنه SQL ارفام رو به عنوان عدد در نظر میگیره:

string query = string.Format("SELECT codemelli from personal WHERE codemelli='{0}'", nationalCode);


مشکلی که برام درست میکنه: در جدول ،اول هر کد ملی '{0}' رو اضافه میکنه. که در موقه جستجوی like و ... نتیجه نمیگیرم.

plus
شنبه 21 تیر 1393, 20:17 عصر
شما به String.Format دقت نکردی! اصلا اینطوری استفاده کن:

string query = "SELECT codemelli from personal WHERE codemelli='" + nationalCode + "'";

ATalebD99
شنبه 24 آبان 1393, 09:35 صبح
سلام زمان زیادی گذشته آیا به نتیجه رسیدید؟