PDA

View Full Version : مبتدی: خطای لاگین



soheila2012
یک شنبه 12 خرداد 1392, 17:19 عصر
این خط کد چرا اشتباه ست؟؟!! وب سایت با C#‎‎‎ و ASP و اکسس می خوام بعد از وارد کردن نام کاربری و رمز عبور وارد صفحه ی Personal شود.
OleDbCommand cmd = newOleDbCommand("select count(*) from tblSabt where uid=@username pwd=@Pass", con);

cmd.Parameters.AddWithValue("@uid", txtName0.Text);
cmd.Parameters.AddWithValue("@pwd", txtPass0.Text);
con.Open();
cmd.Connection = con;
if (cmd.ExecuteScalar="1")
{
Response.Redirect("personal.aspx");
}
else
{
Label2.Visible = true;
}


از ExecuteScalar خطا میگیرد و میگه که گروهی است!!

Cybersilent
یک شنبه 12 خرداد 1392, 17:46 عصر
ببینید از این نیست:

select count(*) from tblSabt where uid=@username pwd=@Pass
رو به

select count(*) from tblSabt where uid=@username AND pwd=@Pass
تغییر بدید.

soheila2012
یک شنبه 12 خرداد 1392, 18:02 عصر
نه
گذاشته بودم بازم همین بود
ارورش اینه:
cannot assing to
ExecuteScalar
because is a 'method groupe'

soheila2012
یک شنبه 12 خرداد 1392, 18:35 عصر
ای بابا کسی نیست که به ما بگه استفاده از این دستور درسته یا نه؟؟؟

صباح فتحی
یک شنبه 12 خرداد 1392, 18:58 عصر
سلام چراکار خودتونو سخت کردید
توشرط == بگذارید

soheila2012
یک شنبه 12 خرداد 1392, 22:09 عصر
سلام چراکار خودتونو سخت کردید
توشرط == بگذارید

نه این هم نمیشه.با همه ی اینایی که میگین امتحان کردم.با == ارور بیشتر میشه!!
خطا در خطا در cmd.ExecuteScalar

soheila2012
یک شنبه 12 خرداد 1392, 23:08 عصر
هیچ کدوم از مطالبی که از قبل بود فایده ای نداشت و نتونست راجع به این ارورم کمکی کنه کلا زیرورو شد ولی چیزی پیدا نکردم!!
کسی نمیدونه باید چه کنم؟
میخوام با استفاده از دیتابیس اکسس نام کاربری و رمز عبور رو بخونه و در صورت صحیح بودن وارد صفحه ی مورد نظر بشه.
ثبت اطلاعات به اکسس درست انجام مشه ولی خوندن نه!!

vira1368
یک شنبه 12 خرداد 1392, 23:17 عصر
شما از متد استفاده کردین ولی پرانتزی ندیدم در ضمن در if باید از == استفاده کنید
چون اگر = بذارید همیشه if مقدارش true میشه و این فاجعه است.


if (cmd.ExecuteScalar() == "1")
{
// Enter Code Here
}


موفق باشید

صباح فتحی
یک شنبه 12 خرداد 1392, 23:20 عصر
Output = this.cmd.ExecuteScalar().ToString();
اینطور ببین میشه

صباح فتحی
یک شنبه 12 خرداد 1392, 23:22 عصر
نه این هم نمیشه.با همه ی اینایی که میگین امتحان کردم.با == ارور بیشتر میشه!!
خطا در خطا در cmd.ExecuteScalar
امکان نداره باید حتما توشرط== باشه

soheila2012
یک شنبه 12 خرداد 1392, 23:26 عصر
این خطا و کدها 105058

soheila2012
یک شنبه 12 خرداد 1392, 23:35 عصر
حتما تو ارتباط برقرار کردن دارم اشتباه میکنم
فیلد هام که userName و Pass هستن و از اون طرف تکست هام txtName0,txtPass0
اسم جدول رو هم درست گذاشتم.
خب پس چشه؟!!

vira1368
یک شنبه 12 خرداد 1392, 23:45 عصر
اگر اشتباه نکنم ExecuteScalar() مربوط به زمانی است که insert, update یا delete انجام بشه.
برای select از cmd.ExecuteReader() استفاده کنید.

soheila2012
یک شنبه 12 خرداد 1392, 23:52 عصر
اگر اشتباه نکنم ExecuteScalar() مربوط به زمانی است که insert, update یا delete انجام بشه.
برای select از cmd.ExecuteReader() استفاده کنید.

if (cmd.ExecuteReader().ToString()=="1")

چون از تبدیل ایراد میگرفت به string گذاشتم
بازم از همین یه خط ایراد میگره فک کنم خوشش میاد وقتمو بگیره.الته تموم صفحات کامله جز این.نمیشه هم بیخیال شد چون باید یه ارتباطی با اکسس داشته باشیم.
مرسی از همه که جوابمو میدین.
کلا اگه بخوام صفحه ی لاگین درست کنم که با اکسس در ارتباط باشه این روشم درسته؟؟

Cybersilent
دوشنبه 13 خرداد 1392, 00:02 صبح
این خطا و کدها 105058
ولی اینجا که مشخصه مشکل کجاست !! شما پارامتر رو به کوئری نفرستادید!
شما در کوئری نوشتید @username ولی @uid رو بهش پاس دادید! همینطور در مورد pwd!!
فکر کنم اگر کد رو به شکل زیر تغییر بدید درست بشه.


cmd.Parameters.AddWithValue("@username", txtName0.Text);
cmd.Parameters.AddWithValue("@Pass", txtPass0.Text);

Cybersilent
دوشنبه 13 خرداد 1392, 00:11 صبح
کلا اگه بخوام صفحه ی لاگین درست کنم که با اکسس در ارتباط باشه این روشم درسته؟؟
اگر در هنگام ثبت نام بررسی می کنید که نام کاربری تکراری نباشه و یک شخص نتونه دو اکانت داشته باشه فکر نکنم مشکلی بوجود بیاد.
در ضمن پیشنهاد می کنم به جای Count(*) از Count(id) استفاده کنید.

vira1368
دوشنبه 13 خرداد 1392, 00:15 صبح
if (cmd.ExecuteReader().ToString()=="1")

چون از تبدیل ایراد میگرفت به string گذاشتم
بازم از همین یه خط ایراد میگره فک کنم خوشش میاد وقتمو بگیره.الته تموم صفحات کامله جز این.نمیشه هم بیخیال شد چون باید یه ارتباطی با اکسس داشته باشیم.
مرسی از همه که جوابمو میدین.
کلا اگه بخوام صفحه ی لاگین درست کنم که با اکسس در ارتباط باشه این روشم درسته؟؟

برای استفاده از Reader باید به اینصورت عمل کنید


OleDbCommand cmd = new OleDbCommand("select * from tblSabt", con);
con.Open();
cmd.Connection = con;
OleDbDataReader r = cmd.ExecuteReader();
r.Read();
if (r["uid"].ToString() == txtName0.Text && r["pwd"].ToString() == txtPass0.Text)
{
Response.Redirect("personal.aspx");
}
else
{
Label2.Visible = true;
}

fakhravari
دوشنبه 13 خرداد 1392, 00:43 صبح
تو عکس @username خراب دادین

صباح فتحی
دوشنبه 13 خرداد 1392, 01:04 صبح
ولی این روش خوبی واسه لاگین نیست شما select *بگیر بریز تو دیتا تیبل.بعد بگو سطر دیتا تیبل تعدادش بیشتر1بود........

tree1371
دوشنبه 13 خرداد 1392, 01:06 صبح
کد نویسیتون اشتباه هست .

شما اول باید از execute reader استفاده کنید . بعدشم واسه execute reader که نمی گن اگر برابر با 1 بود باید بگید اگر read کرده بود یعنی


SqlDataReader red = cmd.ExecuteReader();
red.Read();
if (red.HasRows)
{
}



یک همچین چیزی میشه.

صباح فتحی
دوشنبه 13 خرداد 1392, 01:06 صبح
strConnectionString = settings.ConnectionString;
cn = new SqlConnection(strConnectionString);
//----------------------------
int Q;
SqlDataAdapter myCommand = new SqlDataAdapter("Select * from [biieb] where username = '" + TextBox1.Text + "' AND Pass='" + TextBox2.Text+ "'", cn);
DataSet ds = new DataSet();
Q= myCommand.Fill(ds, "TitleDetails");
if (Q > 0)
{
Session["UN"]=TextBox1.Text;
Response.Redirect("insretnews.aspx");

}
else
{
Label1.Text = "رمز نامعتبر است";
}

soheila2012
دوشنبه 13 خرداد 1392, 14:20 عصر
اگر در هنگام ثبت نام بررسی می کنید که نام کاربری تکراری نباشه و یک شخص نتونه دو اکانت داشته باشه فکر نکنم مشکلی بوجود بیاد.
در ضمن پیشنهاد می کنم به جای Count(*) از Count(id) استفاده کنید.

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

soheila2012
دوشنبه 13 خرداد 1392, 14:22 عصر
مرسی از همه بسیار زیاد
ولی من از اکسس استفاده می کنم نه از SQL

Cybersilent
دوشنبه 13 خرداد 1392, 15:15 عصر
اینا مهم نیست اشکال نداره با دو تا کاربر وارد بشه
چرا داره! اونوقت باید علامت = رو با =< عوض کنید.

_behnam_
دوشنبه 13 خرداد 1392, 15:39 عصر
سلام دوست عزیز.
در صورت امکان از LINQ to SQL استفاده کنید بهتر هست.
اما این روش که استفاده کردید مثل زیر بنویسید. البته برای SQL بود شما تبدیلش کنید به اکسس

public bool checkLogin(string username,string password)
{
SqlCommand cmd = new SqlCommand("select uid,pwd from tblSabt where uid=@username and pwd=@Pass", connection);
cmd.Parameters.Add("@username", username.Replace("'","''"));
cmd.Parameters.Add("@pass", password.Replace("'", "''"));
SqlDataReader Reader = cmd.ExecuteReader();
if (Reader.Read())
return true;
return false;
}

صباح فتحی
دوشنبه 13 خرداد 1392, 16:47 عصر
مرسی از همه بسیار زیاد
ولی من از اکسس استفاده می کنم نه از SQL
اون کدی که گذاشتم واسه اکسسم میشه.بجای sql
oledbبزار حله

soheila2012
دوشنبه 13 خرداد 1392, 19:29 عصر
ولی اینجا که مشخصه مشکل کجاست !! شما پارامتر رو به کوئری نفرستادید!
شما در کوئری نوشتید @username ولی @uid رو بهش پاس دادید! همینطور در مورد pwd!!
فکر کنم اگر کد رو به شکل زیر تغییر بدید درست بشه.


cmd.Parameters.AddWithValue("@username", txtName0.Text);
cmd.Parameters.AddWithValue("@Pass", txtPass0.Text);

نه این هم نمیشه
من قسمت بالاش ارجاع دادم از این به بعد خودش uid رو میشناسه.
باز هم به خاطر شما یه بار انجام دادم ولی نشد که نشد!!

soheila2012
دوشنبه 13 خرداد 1392, 19:34 عصر
برای استفاده از Reader باید به اینصورت عمل کنید


OleDbCommand cmd = new OleDbCommand("select * from tblSabt", con);
con.Open();
cmd.Connection = con;
OleDbDataReader r = cmd.ExecuteReader();
r.Read();
if (r["uid"].ToString() == txtName0.Text && r["pwd"].ToString() == txtPass0.Text)
{
Response.Redirect("personal.aspx");
}
else
{
Label2.Visible = true;
}



OleDbCommand cmd = new OleDbCommand("select * from tblSabt", con);
con.Open();
cmd.Connection = con;
OleDbDataReader r = cmd.ExecuteReader();
r.Read();
if (r["username"].ToString() == txtName0.Text && r["Pass"].ToString() == txtPass0.Text)
{
Response.Redirect("personal.aspx");
} else
{
Label2.Visible = true;
}


عزیزمی
عالی بود
مرسی
درست شد

soheila2012
دوشنبه 13 خرداد 1392, 19:37 عصر
مرسی از همه که وقت گذاشتین و جوابم رو دادین.
درست شد البته با کمک شما.
از اونایی که از فرصت استفاده کردن و به جای یاد دادن ماهیگیری ماهی تعارف کردن هم متشکرم ولی دوست داشتم برنامه ای که نوشتم رو تموم کنم نه آماده ش رو بگیرم.
خلاصه اینکه مرسی.