PDA

View Full Version : Invalid column name



papa_fal
شنبه 04 شهریور 1385, 22:09 عصر
با سلام به دوستان
خوب به نظر می رسه که سوالم مربوط به بخش {اس کیو ال} است ولی چون برنامه من با {ای اس پی دات نت} است در این بخش گذاشتم.

این کد من است:


String temp=Request.QueryString ["stu_code"];


com3.CommandText="SELECT prof_name,prof_family,prof_code FROM professor WHERE prof_code in(select prof_code FROM professor_project WHERE project_code=(SELECT project_code FROM student WHERE stu_code=811 ))";


من به جای 811 می خوام یک متغیر بذارم که شماره خاصی با توجه به موقعیت در آن لود شود نه یک شماره خاص ولی هر متغیری می ذارم از من خطا می گیرد.


com3.CommandText="SELECT prof_name,prof_family,prof_code FROM professor WHERE prof_code in(select prof_code FROM professor_project WHERE project_code=(SELECT project_code FROM student WHERE stu_code=temp ))";



این خطا را می گیرد:


Invalid column name 'temp'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'temp'.


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

rockpigeon
شنبه 04 شهریور 1385, 22:18 عصر
String temp=Request.QueryString ["stu_code"];


com3.CommandText="SELECT prof_name,prof_family,prof_code FROM professor WHERE prof_code in(select prof_code FROM professor_project WHERE project_code=(SELECT project_code FROM student WHERE stu_code=811 ))";

به جای آوردن اسم تمام فیلد ها اگه بنویسی

select * from Professor where.... مشکلت حل میشه ولی از نظر علمی نمیدونم چرا مشکل پیش میاد و ارور میگیره.
موفق باشید.

reza_rad
یک شنبه 05 شهریور 1385, 09:58 صبح
ولی از نظر علمی نمیدونم چرا مشکل پیش میاد و ارور میگیره.

مشکل به این دلیله که:
شما متغری به نام temp گرفتید و مقدار اونو خواستید توی کوئری استفاده کنید...
روش استفاده از متغیر شما باید اینجوری باشه:


com3.CommandText="SELECT prof_name,prof_family,prof_code FROM professor WHERE professor WHERE prof_code in(select prof_code FROM professor_project WHERE project_code=(SELECT project_code FROM student WHERE stu_code="+temp+" ))";

البته این هم در صورتی درسته که متغیر temp از نوع string باشه.
اگه نیست و مثلا int هست باید به string تبدیلش کنید...

papa_fal
دوشنبه 06 شهریور 1385, 08:36 صبح
بله درست شد ممنونم
حا لا حکمت استفاده از این علائم در کنار متغیر temp چیه؟؟
ممنون می شم که یک توضیحی بدهید.

mahdi_negahi
دوشنبه 06 شهریور 1385, 08:49 صبح
این JOIN دو متغییر رشته ای است یعنی TEMP را به Quey شما میچسباند
برای فهم بهتر یک Break Point بزارید و مقدار نهایی این خط را در هنگام اجرا ببینید

reza_rad
دوشنبه 06 شهریور 1385, 08:52 صبح
خواهش می کنم:)



حا لا حکمت استفاده از این علائم در کنار متغیر temp چیه؟؟
ممنون می شم که یک توضیحی بدهید.

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


"SELECT prof_name,prof_family,prof_code FROM professor WHERE prof_code in(select prof_code FROM professor_project WHERE project_code=(SELECT project_code FROM student WHERE stu_code=temp ))"

چون جایی مشخص نشده که temp یک متغیره!

ولی توی حالتی که من نوشتم مقدار داخل متغیر به سفقهدل شما وصل میشه
برای وصل کردن دو تا استرینگ به این صورت توی دات نت عمل میشه:


str1="salam"+" test";