PDA

View Full Version : پیغام خطای syntax error



xxxsenatorxxx
دوشنبه 29 اسفند 1390, 23:34 عصر
سلام
من چند ماهیه به یک ارور خوردم به 3 تا برنامه نویس حرفه ای هم نشون دادم هیچکس سر در نیاورد
یک دیتا بیس دارم که 2 تیبل داره که یکیش کار میکنه ولی تیبل دوم ارور میده.
مثلا برای فرم لاگینم :
System.Data.OleDb.OleDbDataReader rd;
oleDbDataAdapter1.SelectCommand.CommandText = "select * from dba where name = '" + this.textBox1.Text + "' and family='" + this.textBox2.Text + "' ";
oleDbConnection1.Open();
rd = oleDbDataAdapter1.SelectCommand.ExecuteReader();
rd.Read();
if (rd.HasRows)
{
this.Hide();
Form1 f = new Form1();
f.ShowDialog();
}

این خط ارور سینتکس میده rd = oleDbDataAdapter1.SelectCommand.ExecuteReader();
وقتی تو همین خط دوم اسم اون یکی تیبل رو میدم درست کار میکنه ولی مشکلش فقط این تیبله.

اساتید یه کمکی کنن
ممنون

omid_csh
دوشنبه 29 اسفند 1390, 23:58 عصر
سلام

اولا باید یک OleDbCommand تعریف کنی به این صورت

OleDbCommand cmd = new OleDbCommand();

بعد باید خاصیت commandtext و connection اونو ست کنی


cmd.CommandText = "select * from dba where name = '" + this.textBox1.Text +
"' and family='" + this.textBox2.Text + "' ";
cmd.Connection = con;


حالا باید این command رو برای dataAdapter ست کنی


da.SelectCommand = cmd;


البته سعی کن برای ارسال پارمتر به DBMS از OleDbParameter استفاده کنی، از لحاظ امنیتی هم بهتر

موفق باشی

xxxsenatorxxx
شنبه 05 فروردین 1391, 00:04 صبح
سلام

اولا باید یک OleDbCommand تعریف کنی به این صورت

OleDbCommand cmd = new OleDbCommand();

بعد باید خاصیت commandtext و connection اونو ست کنی


cmd.CommandText = "select * from dba where name = '" + this.textBox1.Text +
"' and family='" + this.textBox2.Text + "' ";
cmd.Connection = con;


حالا باید این command رو برای dataAdapter ست کنی


da.SelectCommand = cmd;


البته سعی کن برای ارسال پارمتر به DBMS از OleDbParameter استفاده کنی، از لحاظ امنیتی هم بهتر

موفق باشی
ممنون تمتم اینارو رفتم ولی ارور همچنان باقیست

hosseinenayati_2009
شنبه 05 فروردین 1391, 13:33 عصر
سلام.
بنظرم چون فیلد های تیبلوتون مشکل داره.شما نباید name , family بذارید . چون توی یه پروزه من خودم گذاشتم خطا میداد.شما اسم فیلد های تیبل را تغییر بدین . به احتمال 99% درست میشه

ROSTAM2
شنبه 05 فروردین 1391, 17:08 عصر
یه سوال تو #C می اگه ادامه کد و تو لاین بعدی بدین نحو بنویسی واقعا جواب می ده؟

cmd.CommandText = "select * from dba where name = '" + this.textBox1.Text +
"' and family='" + this.textBox2.Text + "' ";

vistacali
شنبه 05 فروردین 1391, 18:22 عصر
یه سوال تو #C می اگه ادامه کد و تو لاین بعدی بدین نحو بنویسی واقعا جواب می ده؟

cmd.CommandText = "select * from dba where name = '" + this.textBox1.Text +
"' and family='" + this.textBox2.Text + "' ";


اره مشکلی نداره در سی شارپ اینجوری نوشتن

vistacali
شنبه 05 فروردین 1391, 18:24 عصر
سلام
من چند ماهیه به یک ارور خوردم به 3 تا برنامه نویس حرفه ای هم نشون دادم هیچکس سر در نیاورد
یک دیتا بیس دارم که 2 تیبل داره که یکیش کار میکنه ولی تیبل دوم ارور میده.
مثلا برای فرم لاگینم :
System.Data.OleDb.OleDbDataReader rd;
oleDbDataAdapter1.SelectCommand.CommandText = "select * from dba where name = '" + this.textBox1.Text + "' and family='" + this.textBox2.Text + "' ";
oleDbConnection1.Open();
rd = oleDbDataAdapter1.SelectCommand.ExecuteReader();
rd.Read();
if (rd.HasRows)
{
this.Hide();
Form1 f = new Form1();
f.ShowDialog();
}

این خط ارور سینتکس میده rd = oleDbDataAdapter1.SelectCommand.ExecuteReader();
وقتی تو همین خط دوم اسم اون یکی تیبل رو میدم درست کار میکنه ولی مشکلش فقط این تیبله.

اساتید یه کمکی کنن
ممنون

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

xxxsenatorxxx
یک شنبه 13 فروردین 1391, 18:04 عصر
سلام.
بنظرم چون فیلد های تیبلوتون مشکل داره.شما نباید name , family بذارید . چون توی یه پروزه من خودم گذاشتم خطا میداد.شما اسم فیلد های تیبل را تغییر بدین . به احتمال 99% درست میشه

جناب ممنون ولی فکر نکنم این باشه چون پروژه های دیگه هم با نام و فبمیلی داشتم درستکار میکرده

xxxsenatorxxx
یک شنبه 13 فروردین 1391, 18:06 عصر
یه سوال تو #C می اگه ادامه کد و تو لاین بعدی بدین نحو بنویسی واقعا جواب می ده؟

cmd.CommandText = "select * from dba where name = '" + this.textBox1.Text +
"' and family='" + this.textBox2.Text + "' ";

من زیاد وارد نیستم از دوستان بپرسید

xxxsenatorxxx
یک شنبه 13 فروردین 1391, 19:01 عصر
میشه برنامه رو بزارید تا ببینیمش اگر براتون امکان داره و برنامه مهمی نیست چون اونجور بهتر میشه راهنمایی کرد

http://uploadkon.ir/uploads/45e887268df1287d01b8afbb09408dec.rar

در ضمن میشه روش آپلود تو همین سایت رو بگید بابام دراومد یه سایت ااپلود پیدا کردم

Yanehsar
یک شنبه 13 فروردین 1391, 22:57 عصر
سلام کاش برنامه رو با 2008 ذخیره میکردی تا میشد همه ببینن
کلمه this رو حذف کن امتحان کنن ببین چی جواب میده یا نه


cmd.CommandText = "select * from dba where name = '" + textBox1.Text +"' and family='" + textBox2.Text+"';

xxxsenatorxxx
یک شنبه 13 فروردین 1391, 23:31 عصر
سلام کاش برنامه رو با 2008 ذخیره میکردی تا میشد همه ببینن
کلمه this رو حذف کن امتحان کنن ببین چی جواب میده یا نه


cmd.CommandText = "select * from dba where name = '" + textBox1.Text +"' and family='" + textBox2.Text+"';





امتحان کردم درست نشد.ربطی به دیس نداره چون اگر داشت نباید با اون یکی تیبل هم کار کنه
برای تبدیل 2010 به 2008 کافیه یه پروژه با 2008 به همین نام درست کنی بعد محتویاته 2010 روبریزی تو 2008 .امتحان کنید جواب داد یه ندا بدید.ممنون

Yanehsar
دوشنبه 14 فروردین 1391, 00:06 صبح
امتحان کردم درست نشد.ربطی به دیس نداره چون اگر داشت نباید با اون یکی تیبل هم کار کنه
برای تبدیل 2010 به 2008 کافیه یه پروژه با 2008 به همین نام درست کنی بعد محتویاته 2010 روبریزی تو 2008 .امتحان کنید جواب داد یه ندا بدید.ممنون

سلام امتحان کردم نشد این هم بگم بعضی وقتها سی شارپ ایرادهای بنی اسرائیلی میگیره این تایپک هم نمونش که خودم برا کمک گذاشتم بعد فرم خودمو از طراحی کردم و از همون کدها استفاده کردم بدون مشکل برنامه رو اجرا کرد.
http://barnamenevis.org/showthread.php?334418-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A8%D8%A7%DB%8C%D9%86%D8%AF-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%D8%B1-%DA%A9%D9%85%D8%A8%D9%88%D8%A8%D8%A7%DA%A9%D8%B3

Hybrid
دوشنبه 14 فروردین 1391, 00:16 صبح
سلام ، توضیحات دوستمون در پست دوم رو اعمال کنید ، سپس فضای نامی System.data.oledb رو به برنامه اضافه کنید سپس خط اول کدتون رو که قرار دادین به شکل زیر تغییر بدین احتماالا درست بشه ،


OleDbDataReader rd = default(OleDbDataReader);

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

banitaba.ommolketab
دوشنبه 14 فروردین 1391, 10:56 صبح
سلام
پیشنهاد:
دوست من CommandText را با استفاده از string.format تعریف کن ، اینجوری هم پیچیدگی کارت کم میشه و راحت تر میتونی دنبال اشکال کار بگردی.

xxxsenatorxxx
دوشنبه 14 فروردین 1391, 14:05 عصر
سلام ، توضیحات دوستمون در پست دوم رو اعمال کنید ، سپس فضای نامی System.data.oledb رو به برنامه اضافه کنید سپس خط اول کدتون رو که قرار دادین به شکل زیر تغییر بدین احتماالا درست بشه ،


OleDbDataReader rd = default(OleDbDataReader);

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


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

cherchil_hra
دوشنبه 14 فروردین 1391, 15:42 عصر
توی دیتاستت جدول یوزر expr1 تا expr5 رو حذف کن
توی فرم login شی oleDbDataAdapter1 خاصیت selectCommand مقدار commandText برابر با :
SELECT ID, admin, [user], pass
FROM [USER]
WHERE ([user] = ?) AND (pass = ?)
قرار بده. تایید کن. پیغامی که بهت میده رو yes کن

دستور oleDbDataAdapter1.SelectCommand.CommandText = "select * from user where user = '" + this.textBox1.Text + "' and pass ='" + this.textBox2.Text + "' "; حذف کن

این قسمت رو قبل از ExecuteReader بذار oleDbDataAdapter1.SelectCommand.Parameters[0].Value = textBox1.Text;
oleDbDataAdapter1.SelectCommand.Parameters[1].Value = textBox2.Text;

درست میشه!

بد استفاده کردی. توی دیتاستت tableadapter استفاده کن دیگه نیازی به DataAdapter نداری!
شما دوتا روش رو باهم تلفیق کردی

xxxsenatorxxx
دوشنبه 14 فروردین 1391, 19:23 عصر
توی دیتاستت جدول یوزر expr1 تا expr5 رو حذف کن
توی فرم login شی oleDbDataAdapter1 خاصیت selectCommand مقدار commandText برابر با :
SELECT ID, admin, [user], pass
FROM [USER]
WHERE ([user] = ?) AND (pass = ?)
قرار بده. تایید کن. پیغامی که بهت میده رو yes کن

دستور oleDbDataAdapter1.SelectCommand.CommandText = "select * from user where user = '" + this.textBox1.Text + "' and pass ='" + this.textBox2.Text + "' "; حذف کن

این قسمت رو قبل از ExecuteReader بذار oleDbDataAdapter1.SelectCommand.Parameters[0].Value = textBox1.Text;
oleDbDataAdapter1.SelectCommand.Parameters[1].Value = textBox2.Text;

درست میشه!

بد استفاده کردی. توی دیتاستت tableadapter استفاده کن دیگه نیازی به DataAdapter نداری!
شما دوتا روش رو باهم تلفیق کردی

:متعجب::متعجب::گیج::گریه::قهق ه::گیج:
آقا دمت گرم فقط همون اولین کدی رو که گفتی رو گذاشتم درست شد حتی اکسپرت رو هم حدف نگردم.6 ماه تو این گیر کرده بودم.واقعا ممنون .تا الان کجا بودی؟!!؟!؟!؟:قلب: فقط میشه توضیح بدی یوزر تو کروشه چه فرقی داشت و کلا این که چرا بدون کروشه جواب نمیداد ولی واسه dba جواب میداد.آیا بقیه کد هایی هم که گفتی اعمال کنم یعنی اونها برای همین ارور بود یا اونها برای بهینه کردن فرم وافزایش سرعت و راحت اجرا شدنه؟یه چیزه دیگه اون اکسپرتها چین و چه جوری به وجود اومدن چون من نساختمشون؟
ممنون .اشک شوق تو چشمم حلقه زده :گریه::لبخند:!!:لبخند:

cherchil_hra
سه شنبه 15 فروردین 1391, 08:12 صبح
:متعجب::متعجب::گیج::گریه::قهق ه::گیج:
آقا دمت گرم فقط همون اولین کدی رو که گفتی رو گذاشتم درست شد حتی اکسپرت رو هم حدف نگردم.6 ماه تو این گیر کرده بودم.واقعا ممنون .تا الان کجا بودی؟!!؟!؟!؟:قلب: فقط میشه توضیح بدی یوزر تو کروشه چه فرقی داشت و کلا این که چرا بدون کروشه جواب نمیداد ولی واسه dba جواب میداد.آیا بقیه کد هایی هم که گفتی اعمال کنم یعنی اونها برای همین ارور بود یا اونها برای بهینه کردن فرم وافزایش سرعت و راحت اجرا شدنه؟یه چیزه دیگه اون اکسپرتها چین و چه جوری به وجود اومدن چون من نساختمشون؟
ممنون .اشک شوق تو چشمم حلقه زده :گریه::لبخند:!!:لبخند:

user جزو کلمات کلیدی هست. اینجا می تونی لیست کلمات رزرو شده (کلیدی) در اکسس 2000 رو ببینی: http://support.microsoft.com/default.aspx?scid=kb;en-us;209187
وقتی جدول یا فیلدی همنام با این کلمات باشه باید از براکت استفاده کنی: [نام فیلد یا جدول]
یا وقتی که در نام فیلدت از space استفاده کردی: [family name]، که بهتر هست از فاصله استفاده نکنی ...


توی دیتاستت جدول یوزر expr1 تا expr5 رو حذف کن
اون فیلدها هم چون اضافه بود و جایی استفاده نکردی گفتم پاک کن

برای اینکه خوانایی کدت بالا بره و احتمال خطا در سینتکس دستورات sql کم بشه از string.format استفاده کن:
oleDbDataAdapter1.SelectCommand.CommandText =
string.Format("select * from [user] where [user] = '{0}' and pass ='{1}' ", this.textBox1.Text , this.textBox2.Text );


وقتی شما فایل دیتاست رو به برنامه ات اضافه کردی می تونی از TableAdapter استفاده کنی و دستوراتت رو همون اول داخلشون قرار بدی، که البته یک سری محدودیت های خودش رو داره
اگه می بینی که دستورات مختلفی داری و پارامترهات کم و زیاد می شن از dataAdapter استفاده کن، که توی این برنامه ات نیاز نداری.


موفق باشی