private void Button1_Click(object sender, System.EventArgs e)
{
if(Authenticate(TextBox1.Text,TextBox2.Text ))
{
Response.Write("authenticated"); }
else
{
Response.Write("not authenticated");
} } private bool Authenticate(string username, string password)
{
SqlConnection conn = new SqlConnection ("server=localhost;" + "database=sx;Trusted_Connection=Yes");
try
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sx_login"; SqlParameter ParameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,20);
ParameterUserName.Value = username;
cmd.Parameters.Add(ParameterUserName); SqlParameter ParameterPassword = new SqlParameter("@Password",SqlDbType.VarChar,50);
ParameterPassword.Value = password;
cmd.Parameters.Add(ParameterPassword);
int usercount = Convert.ToInt16(cmd.ExecuteScalar());
if(usercount>0)
{
return true;
}
else
{
return false;
}
}
finally
{
conn.Close();
}
不论我在登录界面输入正确的用户名和密码,还是乱输的,都显示not authenticated,但我找不到错在哪里,帮我看一下。
{
if(Authenticate(TextBox1.Text,TextBox2.Text ))
{
Response.Write("authenticated"); }
else
{
Response.Write("not authenticated");
} } private bool Authenticate(string username, string password)
{
SqlConnection conn = new SqlConnection ("server=localhost;" + "database=sx;Trusted_Connection=Yes");
try
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sx_login"; SqlParameter ParameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,20);
ParameterUserName.Value = username;
cmd.Parameters.Add(ParameterUserName); SqlParameter ParameterPassword = new SqlParameter("@Password",SqlDbType.VarChar,50);
ParameterPassword.Value = password;
cmd.Parameters.Add(ParameterPassword);
int usercount = Convert.ToInt16(cmd.ExecuteScalar());
if(usercount>0)
{
return true;
}
else
{
return false;
}
}
finally
{
conn.Close();
}
不论我在登录界面输入正确的用户名和密码,还是乱输的,都显示not authenticated,但我找不到错在哪里,帮我看一下。
解决方案 »
- 求一sql 语句 写法
- jquery里multiselect控件,在服务端取得数据,怎么绑定啊?
- 简单却郁闷的问题
- showmodaldialog弹出新窗口,ajax
- 求一统计SQL语句。
- 嵌入的语句不能是声明或标记语句
- 用ASP.NET有没办法实现添加新闻标题并将超连接页面信息保存到数据库?
- 错误提示:无法在Web服务器上启动调试,Web服务器的配置不正确.求救!!
- fckeditor编辑器如何响应键盘事件
- 如何获得ASP.net的错误信息?
- 怎么设置让Web服务器不支持ACCESS数据库??
- |||||||||||||||||||||||一个很难很奇怪的问题!请高手解决!超郁闷|||||||||||||||||||||||||||||||||||
所以程序看似正确,实际上是链接、数据库存储过程中任何环节出现的问题都被掩盖起来了至少,推荐的编程风格是每隔try至少有个catch对应。
再看看出错信息
或在catch块中中断一下
检查下变量值
{
if(FormsAuthentication.Authenticate(TextBox1.Text,TextBox2.Text ))
{
Response.Write("authenticated"); }
else
{
//Response.Redirect("sx_teacher_nfo/sxteacherinfo.aspx");
Response.Write("not authenticated");
} } private bool Authenticate(string username, string password)
{
SqlConnection conn = new SqlConnection("server=localhost;" + "database=sx;Trusted_Connection=Yes");
try
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sx_login"; SqlParameter ParameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,20);
ParameterUserName.Value = username;
cmd.Parameters.Add(ParameterUserName); SqlParameter ParameterPassword = new SqlParameter("@Password",SqlDbType.VarChar,50);
ParameterPassword.Value = password;
cmd.Parameters.Add(ParameterPassword);}
catch (Exception e)
{
int usercount = Convert.ToInt16(cmd.ExecuteScalar());
if(usercount>0)
{
return true;
}
else
{
return false;
}
}
finally
{
conn.Close();
}
}加catch后说找不到类型或命名空间名称“cmd”(是否缺少 using 指令或程序集引用?),不可能的呀,cmd是有定义的了。
是说这句的cmd有错
放倒 try块里面去,刚才看错了.或者把cmd的定义放到外层去
{
int usercount = Convert.ToInt16(cmd.ExecuteScalar());
============================
这是什么语句?????????????????????
{
SqlConnection conn = new SqlConnection("server=localhost;" + "database=sx;Trusted_Connection=Yes");
try
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sx_login"; SqlParameter ParameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,20);
ParameterUserName.Value = username;
cmd.Parameters.Add(ParameterUserName); SqlParameter ParameterPassword = new SqlParameter("@Password",SqlDbType.VarChar,50);
ParameterPassword.Value = password;
cmd.Parameters.Add(ParameterPassword);
int usercount = Convert.ToInt16(cmd.ExecuteScalar());
if(usercount>0)
{
return true;
}
else
{
return false;
}
}
catch (Exception e)
{
Response.Write("<script language=javascript>alert('"+e.ToString()+"')</script>");
}
finally
{
conn.Close();
}
}
int usercount = Convert.ToInt16(cmd.ExecuteScalar());
if(usercount>0)
{
return true;
}
else
{
return false;
}放在catch里?catch表示的是异常,你的cmd不发生异常就不会执行这里,把这段放在try{}里试试.
我觉得你这么写有点麻烦,我觉得用存储过程的输出参数就最好了,将查找到的记录数放到输出参数里,然后判断这个输出参数是多少,来返回验证是否成功.还有,你的sx_login存储过程是怎么写的???帖出来给大家look look.
@UserName varchar(8),
@Password varchar(8)
as
select sx_logon , sx_pwd from sx_logo where sx_logon = @UserName And sx_pwd = @Password
GO
@intCount .......
as
set intCount=( select count(1) from sx_logo where sx_logon = @UserName And sx_pwd = @Password)
GO