PDA

View Full Version : سوال: نمایش ندادن مشخصات کاربر هنگامی که از کلاس استفاده میکنم



veniz2008
پنج شنبه 22 دی 1390, 10:46 صبح
سلام،میخوام که برای جستجوی کاربر و نمایش اطلاعات اون (در صورت وجود) از یک کلاس و از طریق stored procedure این کار رو انجام بدم،برای اینکار یک textbox و یک gridview و یک دکمه روی صفحه گذاشتم و میخوام با زدن دکمه اطلاعات کاربر نمایش داده بشه( اگر وجود نداره پیغام مناسب صادر کنه)،مشکل اینجاست که هیچی رو نمایش نمیده،توی پردازه هم تعریف کردم اگر نام کاربری وجود داشت خروجی رو 1 بفرسته،من کدهایی رو که درون دکمه و درون کلاس ایجاد شده نوشتم میذارم،دوستان لطف کنن بگن مشکل کار کجاست؟
کدهای کلاس:

public class myclass
{

public static string Error = "";

SqlConnection con;
SqlCommand cmd;
SqlDataAdapter adapter;
int res;
public myclass()
{

con = new SqlConnection();
cmd = new SqlCommand();
adapter = new SqlDataAdapter();
cmd.Connection = con;
adapter.SelectCommand = cmd;
}
public void connect()
{
string cs = "Data Source=(local);Initial Catalog=Plants;Integrated Security=True";

try
{

con.ConnectionString = cs;
con.Open();

}
catch
{
Error += "خطاي 1100_خطا در اتصال به بانک اطلاعاتي";
}



}
public void disconnect()
{
con.Close();
}
public DataTable select(string userid)
{
DataTable dt = new DataTable();
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "search_user";
cmd.Connection = con;
SqlParameter username = new SqlParameter("@username", userid);
SqlParameter result = new SqlParameter("@result", res);
result.Direction = ParameterDirection.Output;
cmd.Parameters.Add(username);
cmd.Parameters.Add(result);
SqlDataReader reader = cmd.ExecuteReader();

res = int.Parse(result.Value.ToString());
if (res == 1)
adapter.Fill(dt);
else
Error = "چنین کاربری در سیستم ثبت نشده است";
}
catch
{
Error += "خطاي 1101_خطا در خواندن اطلاعات";
}
return dt;
}
}
کدهای درون دکمه:

myclass class1 = new myclass();
class1.connect();
GridView1.DataSource = class1.select(TextBox1.Text.TrimEnd());
GridView1.DataBind();
class1.disconnect();


کد پردازه:

create proc search_user
@username nvarchar(50),
@result int output
as
if(EXISTS(select * from users where UserName=@username))
set @result=1
else
set @result=0
go

meysamrt
پنج شنبه 22 دی 1390, 11:30 صبح
در Stored Procedure هیچ دستوری نداری که نتیجه جستجو رو به برنامه ارسال کنه. باید دستور زیر رو به انتهای Stored Procedure و قبل از go اضافه کنی:
select * from users where UserName=@username

veniz2008
پنج شنبه 22 دی 1390, 12:43 عصر
در Stored Procedure هیچ دستوری نداری که نتیجه جستجو رو به برنامه ارسال کنه. باید دستور زیر رو به انتهای Stored Procedure و قبل از go اضافه کنی:
select * from users where UserName=@username
پس اون دستوری که جلوی EXISTS نوشتم چیه؟؟

veniz2008
پنج شنبه 22 دی 1390, 19:18 عصر
دوستان کسی نیست که بدونه مشکل از کجاست؟

zarrinnegar
پنج شنبه 22 دی 1390, 20:16 عصر
ببین درسته که توی پروسیجرت نوشتی select ولی نتیجه اون رو با exist چک کردی که بگی 1 هست یا نه
نگفتی که select رو نشون بده

متوجه شدی

میشه این


create proc search_user
@username nvarchar(50),
@result int output
as
if(EXISTS(select * from users where UserName=@username))
begin
select * from users where UserName=@username
set @result=1
end

else
set @result=0
go

veniz2008
جمعه 23 دی 1390, 00:23 صبح
دوست عزیزحرف شما قبول،من تغییرات رو ایجاد کردم ولی همچنان هیچی رو نمایش نمیده،من همین عمل رو بدون استفاده از کلاس انجام دادم و به نتیجه رسیدم ولی وقتی از کلاس استفاده میکنم هیچی نمایش داده نمیشه،اساتید لطفا راهنمایی کنن،تشکر.

zarrinnegar
جمعه 23 دی 1390, 21:50 عصر
خوب ممکنه که از نوع خروجیی باشه که تعریف کردی
کلمه output رو بردار بجای اون آخر پروسیجرت بنویس return @result

veniz2008
شنبه 24 دی 1390, 11:56 صبح
خوب ممکنه که از نوع خروجیی باشه که تعریف کردی
کلمه output رو بردار بجای اون آخر پروسیجرت بنویس return @result
کاری رو که گفتید انجام دادم ولی بازم هیچ خروجی رو نمایش نمیده،یه درخواست داشتم،من همه کدهایی رو که استفاده کردم رو توی پست 1 گذاشتم،لطفا داخل محیط ویژوال خودتون تستش کنید ببینید مشکل از کجاست،من خودم فکرم به جایی نمیرسه!،تشکر.

veniz2008
یک شنبه 25 دی 1390, 09:48 صبح
دوستان چند روزی میشه که با این مشکل گرفتار شدم،کسی نیست که بدونه مشکل از کجاست؟

alonemm
یک شنبه 25 دی 1390, 13:00 عصر
سلام:
خود SP رو در محیط NewQuery اجرا کنید و خروجی رو ببینید.
اگر خروجی درست داشت میتونید از متد Load شی DataTable برای پر کردن این شی توسط DataReader استفاده کنید.

من در پست زیر چنین کلاسی رو تعریف کردم مشاهده کنید.
http://barnamenevis.org/showthread.php?322558-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-Custom-Paging-%D8%AF%D8%B1-GridView-%D8%A8%D8%A7-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-Ajax