PDA

View Full Version : چگونه با SqlDataReader سلکت کرد



bitcob589
جمعه 19 اسفند 1390, 17:40 عصر
با سلام
در نظر بگیرید یک تکس باکس داریم اگر کاربر درون تک باکس تایپ کرد و اگر اطلاعاتی در رابطه با متنی درون تکس باکس در دیتابیس بود با استفاده از SqlDataReader اطلاعات آن فیلد را نمایش دهد و اطلاعات داخل لیبل نشان دهد

farhud
جمعه 19 اسفند 1390, 18:42 عصر
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

Ehsan Boorboor
جمعه 19 اسفند 1390, 18:52 عصر
ابتدا این رو در نظر داشته باشید
که کاربرد SqlDataReader برای مواقعی خوب است که باید یک سری Data کم حجمی را به سرعت بخوانیم تا برنامه منتظر نمونه.

اما سناریو ی پیش رو. برنامه از کاربر Username می گیره و Query می زنه به Database و در صورت وجود Username اطلاعات مرتبط را درون lblResult نمایش می دهد.

این کدها رو می تویند درون رویداد کلیک یک Button بنویسید.

string connectionString = "data source= localhost; initial catalog= CS_ASP;" +
" user ID= sa; password= 123;";

SqlConnection connection = new SqlConnection(connectionString);

try
{
connection.Open();

string commandString = "SELECT Username, Age, Email FROM Users " +
"Where Username = @Username";

SqlCommand command = new SqlCommand(commandString, connection);

command.Parameters.AddWithValue("Username", txtSearch.Text);

SqlDataReader reader = command.ExecuteReader();

if (reader.HasRows)
{
lblResult.Text = string.Empty;

while (reader.Read())
{
lblResult.Text += string.Format("Username: {0}<br />" +
"Age: {1}<br />" +
"Eamil: {2}<hr />"
, reader["Username"]
, reader["Age"]
, reader["Email"]);
}
}
}
catch (Exception exception)
{
Response.Clear();
Response.Write(exception.Message);
}
finally
{
connection.Close();
}
اگر نیاز به توضیح بود بگید

*** این فقط یک نمونه کد است و در آن اصول برنامه نویسی حرفه ای رعایت نشده مثلا ConnectionString می توانست درون web.config قرار گیرد و مواردی از این دست. ***

bitcob589
جمعه 19 اسفند 1390, 19:10 عصر
به جای اینکه نتیجه جستجو در لیبل نشان داده شود نتیجه جستجو در کوئری استرینگ گذاشته شود تا نتیجه جستجو را در صفحه دیگر نمایش داده شود به چه صورتی می توان چنین کاری انجام داد

farhud
جمعه 19 اسفند 1390, 19:20 عصر
Response.Redirect("Test.aspx?field="result")

در صفحه Test:

Label1.Text=Request.QueryString["feild"].ToString();

bitcob589
جمعه 19 اسفند 1390, 19:30 عصر
در نظر بگیرید هر سرچ انجام می شود اگر 5 تا فیلد داشته باشد چگونه 5 فیلد داخل کوئری استرینگ ریخت

farhud
جمعه 19 اسفند 1390, 19:47 عصر
هر کدام از فیلدها را با & از هم جدا کن.

bitcob589
جمعه 19 اسفند 1390, 20:02 عصر
اشکال در کد زیر کجا است خطا در خط آخر کد می دهد

string[]=reader["Username"];
string[]=reader["family"];
string[]=reader["password"];
string[]=reader["name"];
Response.Redirect("Test.aspx?field="+&Username&family&password&name)
به نظر شما علت خطای که در کوئری استرینگ می دهد چیست به صورت صحیح به چه صورتی نوشته می شود

Ehsan Boorboor
جمعه 19 اسفند 1390, 20:19 عصر
در نظر بگیرید هر سرچ انجام می شود اگر 5 تا فیلد داشته باشد چگونه 5 فیلد داخل کوئری استرینگ ریخت

بله Reader یک Collection برمی گرداند

با فرض اینکه فقط یک سطر Data داشته باشیم. داده ها رو بخونید به جای اینکه String بگذارید توی پروپرتی Text یک Label یک QueryString ایجاد کنید اونو پاس بدین به Response.Redirect

string url = string.Format("~TestPage.aspx?Name={0}&Age={1}&Email={2}",
reader["Username"]
, reader["Age"]
, reader["Email"]);
Response.Redirect(url);

این برای خواندن مقادیر پارامترهای QueryString از Database

اگر منظورتون این بود که خود پارامتر ها رو از دیتابیس بخونید روش کار مثل همینه

و می تونید value پارامتر ها رو یه جای دیگه ست کنید.

farhud
شنبه 20 اسفند 1390, 13:23 عصر
اشکال در کد زیر کجا است خطا در خط آخر کد می دهد

string[]=reader["Username"];
string[]=reader["family"];
string[]=reader["password"];
string[]=reader["name"];
Response.Redirect("Test.aspx?field="+&Username&family&password&name)
به نظر شما علت خطای که در کوئری استرینگ می دهد چیست به صورت صحیح به چه صورتی نوشته می شود

Response.Redirect("Test.aspx?feild="value"&UserName="value"&Family="value"&password="value"&name="value"


شدیدا توصیه میشه که برای نام کاربری و گذرواژه از Query String استفاده نکنید.

bitcob589
شنبه 20 اسفند 1390, 13:40 عصر
کدی جهت سلکت کردن با SqlDataReade نوشته شده است ولی خطای زیر را می دهد

Procedure or function 'sechtable' expects parameter 'id' which was not supplied.
علت خطا چیست

Ehsan Boorboor
شنبه 20 اسفند 1390, 16:11 عصر
احتمالابرای procedure پارامتر id تعریف کردین ولی موقع اجرا بهش پاس ندادین

اگر می تونید کدتون رو بزارید

bitcob589
شنبه 20 اسفند 1390, 16:38 عصر
کد و پروسیجر به صورت زیر نوشته شده است
83959

bitcob589
شنبه 20 اسفند 1390, 19:26 عصر
به نظر شما اشکال کار در کجا است

Ehsan Boorboor
شنبه 20 اسفند 1390, 19:28 عصر
مشکل از StoredProcedure تون بود

شما دارید بر اساس فیلد nametitle جستجو می کنید فقط کافی مقدار پارامتر @nametitle به sp پاس بدین

بقیه پارامتر هایی که توی sp نوشتین اضافی و بدون کاربردن

@IDfads int,
@namemanager nvarchar(100),
@mobile nvarchar(50)

و همین ها باعث بروز خطا شدن چون منتظرن تا از طرف برنامه بهشون مقدار بدین

bitcob589
شنبه 20 اسفند 1390, 19:38 عصر
پروسیجر به صورت زیر نوشته شود صحیح است

ALTER proc selserch
@IDfads int,
@namemanager nvarchar(100),
@mobile nvarchar(50) ,
@nametitle nvarchar(150) ,
as
select * from[Mics].[dbo].[dataads] where nametitle=@nametitle
RETURN
لطفا در صورت اشتباه نوشتن پروسیجر بالا پروسیجر صورت صحیح بنویسید

bitcob589
شنبه 20 اسفند 1390, 20:05 عصر
پروسیجری در پست قبل نوشته شد خطای قبلی را می دهد

Ehsan Boorboor
شنبه 20 اسفند 1390, 20:05 عصر
شما این پارامتر هارو لازم نداری چرا توی sp میارید.

@IDfads int,
@namemanager nvarchar(100),
@mobile nvarchar(50)



این کد رو بنویسید

ALTER PROCEDURE [dbo].[selserch]

@nametitle nvarchar(150)
AS
BEGIN
SELECT * FROM [Mics].[dbo].[dataads] WHERE nametitle = @nametitle
END


یه سرچ بزنید منابع آموزشی Sql Server پیدا کنید از پایه اصولی کار کنید

به این شکل خودتون رو خسته می کنید و انرژی تون هدر میره