PDA

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



rezgar_roshan
شنبه 20 مهر 1392, 16:09 عصر
سلام دوستان گلم. مشکلی برام پیش اومده هرکاری میکنم متوجه نمیشم مشکل از کجاست لطفا راهنماییم کنید.
دارم روی یه بانک اطلاعاتی کار میکنم یه جدول رو میخوام ویرایش کنم یا استفاده از دستور UPDATE. دستور رو اینجوری استفاده کردم
UPDATE tblUsers SET UserName=@p1,Password=@p2 WHERE UserName='"+txtUser
وقتی برنامه رو اجرا میکنم پیام میده
Syntax error in UPDATE statment
هر کاری میکنمنمیدونم مشکل از کجاست حتی WHERE هم برداشتم که باید کل جدول رو تغییر بده باز هم همون پیامو میده
لطفا راهنماییم کنید چیکار کنم.

kurdboy2175
شنبه 20 مهر 1392, 16:21 عصر
ببین تو میخوای رمزشو عوض کنی درسته
بیا از این دستور استفاده کن اگه اسم جدولت درست باشه
update tblusers set password=@p where username=@username and password=@p2
اگه بتونی به صورت ویزاردی کارکنی خیلی خوبتره
امیدوارم که کمکم بتونه مشکلتونو حل کنه

kurdboy2175
شنبه 20 مهر 1392, 16:27 عصر
ببین تو میخوای رمزشو عوض کنی درسته
بیا از این دستور استفاده کن اگه اسم جدولت درست باشه
update tblusers set password=@p where username=@username and password=@p2
اگه بتونی به صورت ویزاردی کارکنی خیلی خوبتره
امیدوارم که کمکم بتونه مشکلتونو حل کنه

rezgar_roshan
شنبه 20 مهر 1392, 23:25 عصر
کاک kurdboy2175 ممنون از راهنماییتون ولی کد شما را اعمال کردم باز همون ارور رو میده. سپاس کاکی خوم

veniz2008
شنبه 20 مهر 1392, 23:42 عصر
سلام دوستان گلم. مشکلی برام پیش اومده هرکاری میکنم متوجه نمیشم مشکل از کجاست لطفا راهنماییم کنید.
دارم روی یه بانک اطلاعاتی کار میکنم یه جدول رو میخوام ویرایش کنم یا استفاده از دستور UPDATE. دستور رو اینجوری استفاده کردم
UPDATE tblUsers SET UserName=@p1,Password=@p2 WHERE UserName='"+txtUser
وقتی برنامه رو اجرا میکنم پیام میده
Syntax error in UPDATE statment
هر کاری میکنمنمیدونم مشکل از کجاست حتی WHERE هم برداشتم که باید کل جدول رو تغییر بده باز هم همون پیامو میده
لطفا راهنماییم کنید چیکار کنم.
سلام.
در قسمت آخر کوئری، اون تک کوتیشنی که باز کردی چرا نبستی؟ همچنین باید از خاصیت Text یک تکست باکس استفاده کنی ( txtUser.Text ) .
همیشه باید به ازای هر تک کوتیشنی که باز می کنید، یه تک کوتیشن هم واسه بستن رشته قرار بدید :

"UPDATE tblUsers SET UserName=@p1,Password=@p2 WHERE UserName='"+txtUser.Text.Trim() + "'"
نکته جالب در کوئری شما، تلفیق روش پارامترها با کدنویسی مستقیم هست.
کد نویسی مستقیم جدای از بحث امنیتی که روش بسیار خطرناکی هست ( و سالهاست که منسوخ شده)، از لحاظ ست کردن کوتیشن و دابل کوتیشن هم باید دقت زیادی رو داشته باشید.

SqlConnection con = new SqlConnection("server = .\\md2008;DataBase = DBAzmoon;Integrated Security = True");
SqlCommand cmd = new SqlCommand("UPDATE tblUsers SET UserName=@NewUserName,Password=@NewPassword WHERE UserName= @CurrentUserName", con);
cmd.Parameters.AddWithValue("@CurrentUserName", TxtCurrentUserName.Text.Trim());
cmd.Parameters.AddWithValue("@NewUserName", TxtNewUserName.Text.Trim());
cmd.Parameters.AddWithValue("@NewPassword", TxtNewPassword.Text.Trim());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("رکورد مورد نظر با موفقیت تصحیح گردید");

FastCode
یک شنبه 21 مهر 1392, 00:11 صبح
و اگر خواستی همین کار اشتباه رو ادامه بدی حداقل پشتیبانی unicode فراموش نشود.

"UPDATE tblUsers SET UserName=@p1,Password=@p2 WHERE UserName=N'"+txtUser.Text.Trim() + "'"

FTFY

rezgar_roshan
یک شنبه 21 مهر 1392, 21:15 عصر
اشتباه برای چی؟

veniz2008
یک شنبه 21 مهر 1392, 21:28 عصر
اشتباه برای چی؟
منظورشون همون استفاده از کدنویسی مستقیم هست که همونطور که گفتم براحتی میشه کوئری ها رو هـــــــــک کرد (درباره SQL Injection مطالعه کنید).
کدی که براتون گذاشتم با استفاده از پارامترها هست و مشکل SQL Injection رو نخواهید داشت.
موفق باشید.

Amir_Developer
یک شنبه 21 مهر 1392, 22:04 عصر
اگه هنوز مشکلت حل نشده بهتره توی کدت از [] استفاده کنی یعنی [username] , [password] رو استفاده کن.

rezgar_roshan
یک شنبه 21 مهر 1392, 22:11 عصر
اگه هنوز مشکلت حل نشده بهتره توی کدت از [] استفاده کنی یعنی [username] , [password] رو استفاده کن.

دوست عزیز هنوز مشکلم حل نشده الان یه پیام دیگه هم میده ExecuteNonQuery: Connection property has not been initialized.

Amir_Developer
یک شنبه 21 مهر 1392, 22:38 عصر
دوست عزیز هنوز مشکلم حل نشده الان یه پیام دیگه هم میده ExecuteNonQuery: Connection property has not been initialized.
این کد دوستمون رو به شکل زیر استفاده کن :
SqlConnection con = new SqlConnection("server = .\\md2008;DataBase = DBAzmoon;Integrated Security = True");
SqlCommand cmd = new SqlCommand("UPDATE tblUsers SET [UserName]=[@NewUserName],[Password]=[@NewPassword] WHERE [UserName]= [@CurrentUserName]", con);
cmd.Parameters.AddWithValue("@CurrentUserName", TxtCurrentUserName.Text.Trim());
cmd.Parameters.AddWithValue("@NewUserName", TxtNewUserName.Text.Trim());
cmd.Parameters.AddWithValue("@NewPassword", TxtNewPassword.Text.Trim());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("رکورد مورد نظر با موفقیت تصحیح گردید");

veniz2008
دوشنبه 22 مهر 1392, 00:13 صبح
دوست عزیز هنوز مشکلم حل نشده الان یه پیام دیگه هم میده ExecuteNonQuery: Connection property has not been initialized.
من گمان میکنم کدی رو که من قرار دادم عینا کپی کردید تو پروژه خودتون!!!!
اون کدی که قرار دادم، باید کانکشن استرینگ رو طبق مشخصات sql سیستمتون و طبق نام دیتابیس خودتون ست کنید.
اگر این اصلاحات رو انجام دادید و باز مشکلتون حل نشد کدتون رو بصورت کامل بذارید.
راستی نیازی به گذاشتن قلاب بین کلمات نیست. مشکل شما از کانکشن استرینگ هست.

sendelbor
دوشنبه 22 مهر 1392, 08:11 صبح
با sql server management هم ارور میده ؟
اگه ارور داد متن اون را بزار

rezgar_roshan
دوشنبه 22 مهر 1392, 16:22 عصر
من گمان میکنم کدی رو که من قرار دادم عینا کپی کردید تو پروژه خودتون!!!!
اون کدی که قرار دادم، باید کانکشن استرینگ رو طبق مشخصات sql سیستمتون و طبق نام دیتابیس خودتون ست کنید.
اگر این اصلاحات رو انجام دادید و باز مشکلتون حل نشد کدتون رو بصورت کامل بذارید.
راستی نیازی به گذاشتن قلاب بین کلمات نیست. مشکل شما از کانکشن استرینگ هست.

سلام دوست عزیز. ممنونم از راهنماییتون اون مواردی که فرمودی دقیقا رعایت کردم کدشو میزارم.
OleDbConnection conectdb = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\Hesab.mdb");
OleDbCommand comanddb = new OleDbCommand("UPDATE tblUsers SET UserName=@p1,Password=@p2 WHERE UserName=@w1, Password=@w2", conectdb);
try
{
comanddb.Parameters.Clear();
comanddb.Parameters.AddWithValue("@p1", txtUserNew.Text);
comanddb.Parameters.AddWithValue("@p2", txtPasswordNew.Text);
comanddb.Parameters.AddWithValue("@w1", txtUserOld.Text);
comanddb.Parameters.AddWithValue("@w2", txtPasswordOld.Text);*/

conectdb.Open();
comanddb.ExecuteNonQuery();
conectdb.Close();

comanddb.Dispose();
conectdb.Dispose();

MessageBox.Show("نام کاربری و رمز با موفقیت ویرایش شد", "Ok", MessageBoxButtons.OK, MessageBoxIcon.Information);
frmAsli fm = (frmAsli)Application.OpenForms["frmAsli"];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

veniz2008
دوشنبه 22 مهر 1392, 17:20 عصر
دستور update رو اصلاح کنید. وقتی قراره همزمان دو شرط (یا چند شرط) با هم برقرار باشن باید بین اونها از AND استفاده کنید نه از کاما (,) :

OleDbCommand comanddb = new OleDbCommand("UPDATE tblUsers SET UserName=@p1,Password=@p2 WHERE UserName=@w1 AND Password=@w2", conectdb);
البته مطمئن بشید که کانکشن استرینگی که استفاده می کنید با نسخه اکسس شما همخوانی داشته باشه (اگر به بقیه دستوارت شما هم همین خطا رو میده مشکل از ناسازگاری کانکشن استرینگ هست).
برای دسترسی به کانکشن های اکسس تاپیک زیر رو ملاحظه کنید :
http://www.connectionstrings.com/access/
موفق باشید.

rezgar_roshan
دوشنبه 22 مهر 1392, 22:47 عصر
دستور update رو اصلاح کنید. وقتی قراره همزمان دو شرط (یا چند شرط) با هم برقرار باشن باید بین اونها از AND استفاده کنید نه از کاما (,) :

OleDbCommand comanddb = new OleDbCommand("UPDATE tblUsers SET UserName=@p1,Password=@p2 WHERE UserName=@w1 AND Password=@w2", conectdb);
البته مطمئن بشید که کانکشن استرینگی که استفاده می کنید با نسخه اکسس شما همخوانی داشته باشه (اگر به بقیه دستوارت شما هم همین خطا رو میده مشکل از ناسازگاری کانکشن استرینگ هست).
برای دسترسی به کانکشن های اکسس تاپیک زیر رو ملاحظه کنید :
http://www.connectionstrings.com/access/
موفق باشید.

دوست عزیز و بزرگوارم شرمنده که زیاد مزاحمت شدم ولی کانکشن استرینگ هم اصلاح کردم هم کامند استرینگ هم اصلاح کردم (AND) هم وارد کردم ولی باز همون خطا رو میده حتی اگه شرط دوم هم برداری یا حتی اگه همه شرطها رو برداری بایستی کل جدول رو اصلاح کنه که بازهم ارور میده در ضمن قبلا از همون کد در یه برنامه دیگه استفاده کردم ایرادی نداشت ولی الان باز هم ارور میده

Amir_Developer
سه شنبه 23 مهر 1392, 10:13 صبح
آقا من قبلا این مشکل رو با اکسس داشتم و وقتی از [] استفاده کردم رفع شد در حالی که همون کد توی یه برنامه دیگه بدون [] درست کار میکرد. امتحانش که ضرری نداره.

rezgar_roshan
سه شنبه 23 مهر 1392, 23:40 عصر
آقا من قبلا این مشکل رو با اکسس داشتم و وقتی از [] استفاده کردم رفع شد در حالی که همون کد توی یه برنامه دیگه بدون [] درست کار میکرد. امتحانش که ضرری نداره.

آقا دمت گرم. دستت درد نکنه درست شد. خیلی خیلی خیلی ممنون

FastCode
سه شنبه 23 مهر 1392, 23:57 عصر
البته به این هم دقت کنید که توی پست ۱۷ اون هم فقط از کدتون مشخص میشه که از access استفاده کردید.اگر از ابتدا سوالتون رو درست بنویسید همون موقع پاسخ درست میگیرید.