PDA

View Full Version : سوال: مشکل در آپدیت کردن رکوردهای بانک اطلاعاتی



hesam67_b
سه شنبه 19 مرداد 1389, 16:42 عصر
با سلام به دوستان عزیز.

من توی آپدیت کردن رکوردها مشکل دارم.

از کد زیر استفاده کردم :

string strArg = "Update PhoneBook Set FirstName=@name, LastName=@lName, Groups=@group," +
" MobileNumber=@mNumber, HomeNumber=@hNumber, Address=@address, Email=@mail, " +
"BirthDate=@bDate, Explain=@explain Where ID=@id;";
SqlConnection objConnection = new SqlConnection(add_conn);
SqlCommand objCommand = new SqlCommand(strArg, objConnection);
objConnection.Open();

objCommand.Parameters.AddWithValue("@id", id);
objCommand.Parameters.AddWithValue("@name", txtName.Text);
objCommand.Parameters.AddWithValue("@lName", txtLastName.Text);
objCommand.Parameters.AddWithValue("@group", cboGroups.Text);
objCommand.Parameters.AddWithValue("@mNumber", txtMobileNumber.Text);
objCommand.Parameters.AddWithValue("@hNumber", txtHomeNumber.Text);
objCommand.Parameters.AddWithValue("@address", txtAddress.Text);
objCommand.Parameters.AddWithValue("@mail", txtEmail.Text);
objCommand.Parameters.AddWithValue("@bDate", txtBirthDate.Text.ToString());
objCommand.Parameters.AddWithValue("@explain", txtDescriptions.Text);
objCommand.ExecuteNonQuery();
objConnection.Close();

که این ارور رو میده

Error converting data type nvarchar to numeric.

بعدش با تابع parse مقادیر txtMobileNumber و txtHomeNumber رو هم تبدیل کردم ولی بازم جواب نداد.

دوستان میتونن راهنمایی کنن که مشکل از کجاست :ناراحت::ناراحت:

حجتی نیا
سه شنبه 19 مرداد 1389, 16:47 عصر
با سلام به دوستان عزیز.

من توی آپدیت کردن رکوردها مشکل دارم.

از کد زیر استفاده کردم :

string strArg = "Update PhoneBook Set FirstName=@name, LastName=@lName, Groups=@group," +
" MobileNumber=@mNumber, HomeNumber=@hNumber, Address=@address, Email=@mail, " +
"BirthDate=@bDate, Explain=@explain Where ID=@id;";
SqlConnection objConnection = new SqlConnection(add_conn);
SqlCommand objCommand = new SqlCommand(strArg, objConnection);
objConnection.Open();

objCommand.Parameters.AddWithValue("@id", id);
objCommand.Parameters.AddWithValue("@name", txtName.Text);
objCommand.Parameters.AddWithValue("@lName", txtLastName.Text);
objCommand.Parameters.AddWithValue("@group", cboGroups.Text);
objCommand.Parameters.AddWithValue("@mNumber", txtMobileNumber.Text);
objCommand.Parameters.AddWithValue("@hNumber", txtHomeNumber.Text);
objCommand.Parameters.AddWithValue("@address", txtAddress.Text);
objCommand.Parameters.AddWithValue("@mail", txtEmail.Text);
objCommand.Parameters.AddWithValue("@bDate", txtBirthDate.Text.ToString());
objCommand.Parameters.AddWithValue("@explain", txtDescriptions.Text);
objCommand.ExecuteNonQuery();
objConnection.Close();

که این ارور رو میده

Error converting data type nvarchar to numeric.

بعدش با تابع parse مقادیر txtMobileNumber و txtHomeNumber رو هم تبدیل کردم ولی بازم جواب نداد.

دوستان میتونن راهنمایی کنن که مشکل از کجاست :ناراحت::ناراحت:
با f11 دیباگ کن ببین رو کدوم خطا میده

M.YasPro
سه شنبه 19 مرداد 1389, 16:51 عصر
سلام


objCommand.Parameters.AddWithValue("@mNumber", txtMobileNumber.Text);


پارامترهای از نوع عددی رو به این صورت (پارامتری) تعریف کنید :



objCommand.Parameters.AddWithValue("@mNumber",int.Parse(txtMobileNumber.Text));


موفق باشید .

hesam67_b
سه شنبه 19 مرداد 1389, 16:55 عصر
با f11 دیباگ کن ببین رو کدوم خطا میده

روی این خط خطا میگیره

objCommand.ExecuteNonQuery();

hesam67_b
سه شنبه 19 مرداد 1389, 16:57 عصر
سلام


objCommand.Parameters.AddWithValue("@mNumber", txtMobileNumber.Text);
پارامترهای از نوع عددی رو به این صورت (پارامتری) تعریف کنید :



objCommand.Parameters.AddWithValue("@mNumber",int.Parse(txtMobileNumber.Text));
موفق باشید .

سلام دوست عزیز . این کار رو امتحان کرده بودم ولی این ارور رو میده

Input string was not in a correct format.

حجتی نیا
سه شنبه 19 مرداد 1389, 16:58 عصر
نوع فیدارو بزار (همه)

hesam67_b
سه شنبه 19 مرداد 1389, 17:07 عصر
ID = int

FirstName = ntext

LastName = nchar(25)

Groups = nchar(15)

MobileNumber = numeric(18, 0)

HomeNumber = numeric(18, 0)

Address = nchar(200)

Email = nvarchar(50)

BirthDate = nvarchar(MAX)

Explain = nchar(1000)

MobileNumber هم به عنوان کلید اصلی هست.

میگم نکنه کلید اصلی قابل آپدیت شدن نیست؟؟؟

M.YasPro
سه شنبه 19 مرداد 1389, 17:14 عصر
txtMobileNumber.Text
خالی نیست ؟
مطمئنی مقدار عددی داره ؟

hesam67_b
سه شنبه 19 مرداد 1389, 17:22 عصر
بله مطمئن هستم.

خیلی عجیبه. نمی دونم چرا وقتی دارم مخاطب رو ثبت میکنم با همین کد جواب میده ولی موقع آپدیت این مشکل وجود داره

M.YasPro
سه شنبه 19 مرداد 1389, 17:41 عصر
این دو خط:


objCommand.Parameters.AddWithValue("@mNumber", txtMobileNumber.Text);
objCommand.Parameters.AddWithValue("@hNumber", txtHomeNumber.Text);


رو به صورت



objCommand.Parameters.AddWithValue("@mNumber",int.Parse( txtMobileNumber.Text));
objCommand.Parameters.AddWithValue("@hNumber", int.Parse(txtHomeNumber.Text));

تغییر دادید ؟

مطمئن هستید که مقداردهی درست میشن ؟
الان چه اروری داره ؟

hesam67_b
سه شنبه 19 مرداد 1389, 18:09 عصر
بله امتحان کردم و با long هم امتحان کردم ولی این ارور رو میده

Input string was not in a correct format.

اصلا سر در نمیارم اشکال کار کجاست

حجتی نیا
سه شنبه 19 مرداد 1389, 18:27 عصر
بله امتحان کردم و با long هم امتحان کردم ولی این ارور رو میده

Input string was not in a correct format.

اصلا سر در نمیارم اشکال کار کجاست
داخل solution explorer رو دیتابیس new query بزن و کوئری رو اونجا بنویس، اجرا کن ببین به کجاش ایراد میگیره

hesam67_b
سه شنبه 19 مرداد 1389, 18:38 عصر
آقا من توی solution explorer دیتابیس ندارم.

ولی توی server explorer دیتابیس را دارم که چون تازه شروع کردم به کار با دیتابیس و مبتدی هستم اصلا نمی دونم چیکار باید انجام بدم:ناراحت:

روی جدول راست کلید کردم و new query رو انتخاب کردم ولی بقیه رو دیگه بلد نستم :گریه:

حجتی نیا
سه شنبه 19 مرداد 1389, 19:54 عصر
آقا من توی solution explorer دیتابیس ندارم.

ولی توی server explorer دیتابیس را دارم که چون تازه شروع کردم به کار با دیتابیس و مبتدی هستم اصلا نمی دونم چیکار باید انجام بدم:ناراحت:


شرمندم اشتباه تایپی بود حق با شماست

روی جدول راست کلید کردم و new query رو انتخاب کردم ولی بقیه رو دیگه بلد نستم :گریه:
فعلا فقط اون کوئری رو تو بخش پایین صفحه paste کن و اجرا (ctrl+r) ببین نتیجه میده

hesam67_b
سه شنبه 19 مرداد 1389, 20:13 عصر
داداش قبل از هر چیز تشکر که با صبر و حوصله جوابم رو میدی. دمت گرم داداش:قلب:

من کد زیر رو توی new query اضافه کردم. همین کد رو باید اضافه میکردم؟؟

Update PhoneBook Set FirstName=@name, LastName=@lName, Groups=@group," +
" MobileNumber=@mNumber, HomeNumber=@hNumber, Address=@address, Email=@mail, " +
"BirthDate=@bDate, Explain=@explain Where ID=@id;

وقتی کد بالا رو اجرا میکنم (ctr + r) از @name ارور میگیره.

باید جای این متغیرها چیز دیگه ای بنویسم

حجتی نیا
سه شنبه 19 مرداد 1389, 20:38 عصر
باید جای این متغیرها چیز دیگه ای بنویسم
باید اطلاعات رو بین '' قرار بدی
اینجوری فک نکنم به جواب برسی، برادر میتونی دیتابیس رو بزاری، ببینیم اشکالش چیه؟؟

hesam67_b
سه شنبه 19 مرداد 1389, 21:37 عصر
آقا هرکاری کردیم نشد.

کل پروژه رو قرار بدم؟؟

behnam25214
سه شنبه 19 مرداد 1389, 22:10 عصر
قرار بدی خیلی بهتره:لبخندساده:

حجتی نیا
سه شنبه 19 مرداد 1389, 23:25 عصر
آقا هرکاری کردیم نشد.

کل پروژه رو قرار بدم؟؟
اگه بتونی بهتره ولی فقط دیابیس کفایت میکنه .. درضمن جایی گفته بودی که insert درست کار میکنه ، کد اونو بزار تا با کد update (تو پارامترها) مقایسه کنیم ..

hesam67_b
چهارشنبه 20 مرداد 1389, 00:01 صبح
اینم کد insert که موقع درج مخاطب به خوبی عمل میکنه


string strArg = "Insert into PhoneBook( FirstName, LastName, Groups," +
" MobileNumber, HomeNumber, Address, Email, BirthDate, Explain) " +
"values (@name, @lName, @group, @mNumber, @hNumber, @address, @mail," +
" @bDate, @explain)";

SqlCommand objCommand = new SqlCommand(strArg, objConnection);

objConnection.Open();
if (txtLastName.Text == "")
txtLastName.Text = " ";
if (txtHomeNumber.Text == "")
txtHomeNumber.Text = "0";
objCommand.Parameters.AddWithValue("@name", txtName.Text.Trim());
objCommand.Parameters.AddWithValue("@lName", txtLastName.Text.Trim());
objCommand.Parameters.AddWithValue("@group", cboGroups.Text);
objCommand.Parameters.AddWithValue("@mNumber", txtMobileNumber.Text);
objCommand.Parameters.AddWithValue("@hNumber", txtHomeNumber.Text);
objCommand.Parameters.AddWithValue("@address", txtAddress.Text);
objCommand.Parameters.AddWithValue("@mail", txtEmail.Text);
objCommand.Parameters.AddWithValue("@bDate", txtBirthDate.Text);
objCommand.Parameters.AddWithValue("@explain", txtDescriptions.Text);

objCommand.ExecuteNonQuery();
objConnection.Close();

حجتی نیا
چهارشنبه 20 مرداد 1389, 04:33 صبح
اینم کد insert که موقع درج مخاطب به خوبی عمل میکنه


string strArg = "Insert into PhoneBook( FirstName, LastName, Groups," +
" MobileNumber, HomeNumber, Address, Email, BirthDate, Explain) " +
"values (@name, @lName, @group, @mNumber, @hNumber, @address, @mail," +
" @bDate, @explain)";

SqlCommand objCommand = new SqlCommand(strArg, objConnection);

objConnection.Open();
if (txtLastName.Text == "")
txtLastName.Text = " ";
if (txtHomeNumber.Text == "")
txtHomeNumber.Text = "0";
objCommand.Parameters.AddWithValue("@name", txtName.Text.Trim());
objCommand.Parameters.AddWithValue("@lName", txtLastName.Text.Trim());
objCommand.Parameters.AddWithValue("@group", cboGroups.Text);
objCommand.Parameters.AddWithValue("@mNumber", txtMobileNumber.Text);
objCommand.Parameters.AddWithValue("@hNumber", txtHomeNumber.Text);
objCommand.Parameters.AddWithValue("@address", txtAddress.Text);
objCommand.Parameters.AddWithValue("@mail", txtEmail.Text);
objCommand.Parameters.AddWithValue("@bDate", txtBirthDate.Text);
objCommand.Parameters.AddWithValue("@explain", txtDescriptions.Text);

objCommand.ExecuteNonQuery();
objConnection.Close();

داخل این کد id رو وارد نمیکنی ولی در update براساس اون رکورها رو سرچ و آپدیت میکنی، چجوریاست ؟؟:متفکر:

hesam67_b
چهارشنبه 20 مرداد 1389, 08:39 صبح
من کاربر رو مجبور کردم که برای ویرایش روی یکی از رکوردها کلیک کنه.

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

توی insert که خود به خود id اضافه میشه.

حجتی نیا
چهارشنبه 20 مرداد 1389, 10:07 صبح
بعدش توی رویداد کلیک گریدویو شماره آیدی رو توی یک متغیر ذخیره میکنم
کدش رو میتونی بزار .. درضمن فک کنم مشکل از همینجا باشه، تو UPdate بعد دستوری که پارامتر id رو مقدار میدی، یه breakpoint بزار و با f5 دیباگ کن ببین در متغییر id اطاعاتی وجود داره یا نه ؟؟

hesam67_b
چهارشنبه 20 مرداد 1389, 13:01 عصر
سلام.
این کدش:

id = int.Parse(dataGridView1.CurrentRow.Cells["ID"].Value.ToString());

نه id مشکلی نداره. مقدار داره

حجتی نیا
چهارشنبه 20 مرداد 1389, 14:49 عصر
اگه برنامتو بزاری خیلی بهتره، اینجوری فقط داره وقتمون رو تلف میکنیم ...یا حداقل دیتابیس رو بزار ...

hesam67_b
چهارشنبه 20 مرداد 1389, 15:31 عصر
سلام.

پروژه تقریبا تموم شده. یکم ریزه کاری مونده با همین آپدیت که حالم رو بدجور گرفته.

اینم لینک کل پروژه :


پروژه دفترچه تلفن (http://file.20upload.com/download-15700-1281525805-6ed0a3a26aa0fb81ab2030b71fa8e47b.zip)


شرمنده داداش. ببین میتونی بفهمی چرا مشکل داره.

باید روی یکی از مخاطب ها کلیک کنی و بعد دکمه ویرایش رو مخاطب انتخاب کنی. بعد از انجام تغییرات دکمه ثبت تغییرات رو بزن میبینی که ارور میده

حجتی نیا
چهارشنبه 20 مرداد 1389, 16:04 عصر
دیتابیسی داخل برنامت نیست .. کامل گشتم یه موقع نگی هست !

hesam67_b
چهارشنبه 20 مرداد 1389, 16:24 عصر
ولی من توی قسمت server explorer دیتابیس رو دارم.

مگه دیتابیسی که توی پروژه اضافه میکنیم توی فولدر پروژه نمیره؟؟؟ :افسرده:

من کل پروژه رو زیپ کردم.

به جون خودم من مبتدی هستم.:افسرده:
من روی data connections راست کلیک کردم و یه sql database با نام سرور moon/express ساختم با نام phoneBook که moon نام کامپیوتر من هستش.
بعدش دوباره روی connections راست کلیک کردم و new connection رو انتخاب کردم و بعد از انتخاب microsoft sql server دیتابیس phoneBook رو اضافه کردم.

دقیقا اینجوری ساختم. یعنی باید کار دیگه ای هم میکردم که دیتابیس توی فولدر پروژه قرار بگیره؟؟؟:ناراحت:

حجتی نیا
چهارشنبه 20 مرداد 1389, 18:13 عصر
دقیقا اینجوری ساختم. یعنی باید کار دیگه ای هم میکردم که دیتابیس توی فولدر پروژه قرار بگیره؟؟؟:ناراحت:
شما لان دارید از sqlserver استفاده میکنید نه اکسپرس ..
فعلا اینا مهم نیستند بعدا میتونی یه سرچ بزنی راجع بهش اطلاعات بگیری ..
تو sqlserver رو دیتابیس کلیک راست و task>take offline بزن،بعد برو تو program files>microsoft sql server و تو یکی از پوشه ها دیتابیست رو پیدا کن و اونو کپی کن و یکی واسه من بفرست ..

hesam67_b
چهارشنبه 20 مرداد 1389, 18:27 عصر
آقا من بازم شرمندم.
امیدوارم بتونم جبران کنم :قلب:

اینم دیتابیس :


Database (http://file.20upload.com/download-15918-1281536332-761779afdc5c8ca2379e797071c9cce9.zip)

حجتی نیا
چهارشنبه 20 مرداد 1389, 19:27 عصر
آقا من بازم شرمندم.
امیدوارم بتونم جبران کنم :قلب:

اینم دیتابیس :


Database (http://file.20upload.com/download-15918-1281536332-761779afdc5c8ca2379e797071c9cce9.zip)

در دستور update شما اطلاعات رو از تکس باکس هایی میگیری که مربوط به ورود اطلاعات جدید میشن مثه (txt_name یا txt_mobilenumber) درحالی که باید اطلاعات رو از تکس باکس های (txtshownumber یا txtshowname)بگیرین، چون اطلاعات رو واسه ویرایش در این تکس باکس ها میارین ...
اوکی .؟؟؟

hesam67_b
چهارشنبه 20 مرداد 1389, 19:42 عصر
وای خدای من!!!!!!!!:اشتباه::اشتباه::اشتب ه::اشتباه:

عجب اشتباهی کردم!!!

اصلا باورم نمیشه.
هیچ وقت این اشتباه عجیب رو فراموش نمیکنم.

آقای حجتی عزیز واقعا ممنون. داداش نمی دونم چطور ازت تشکر کنم خدایی.

امیدوارم همیشه موفق و سلامت باشی توی زندگیت:قلب::قلب:

خیلی لطف کردی:قلب:

hesam67_b
چهارشنبه 20 مرداد 1389, 19:47 عصر
راستی آقای حجتی عزیز.

حالا که برنامه رو دیدی نظرت چیه؟؟:لبخندساده:

این دومین پروژه من بود. بیشتر دارم پروژه مینویسم و در حال انجام پروژه چیزهای جدید یاد میگیرم.

بنظرت خوب نوشتم کدها رو؟؟