这段查询代码是哪有问题,怎么一个参数能查出结果,两个参数就查不出。各层代码都列出,急用,谢谢

shoon0312 2012-09-04 10:09:57

UI层:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e) //两参按钮
{
string username = TextBox1.Text.Trim();
string userpwd = TextBox2.Text.Trim();
DataTable dt = new P_AdminManager().SelectAdmin(username, userpwd);
int i = dt.Rows.Count;
if (i > 0)
{
TextBox1.Text = Convert.ToString(i);
TextBox2.Text = "登录成功";
}
else
{
TextBox1.Text = Convert.ToString(i);
TextBox2.Text = "登录失败";
}
protected void Button2_Click(object sender, EventArgs e) //一参按钮
{
string username = TextBox1.Text.Trim();
string userpwd = TextBox2.Text.Trim();
DataTable dt = new P_AdminManager().SelectByUser(username);//
int i = dt.Rows.Count;
if (i > 0)
{
TextBox1.Text = Convert.ToString(i);
TextBox2.Text = "登录成功";
}
else
{
TextBox1.Text = Convert.ToString(i);
TextBox2.Text = "登录失败";
}
}
}

BLL层:
public class P_AdminManager
{
private P_AdminDAO P_dao = null;
public P_AdminManager()
{
P_dao = new P_AdminDAO();
}
public DataTable SelectByUser(string un) //单参
{
return P_dao.SelectByUser(un);
}
public DataTable SelectAdmin(string username, string userpwd)//双参
{
return P_dao.SelectAdmin(username,userpwd);
}
}

DLL层:
public class P_AdminDAO
{
private SQLHelper sqlhelper;
public P_AdminDAO()
{
sqlhelper = new SQLHelper();
}
//单参――――――――――――――――――――――――
public DataTable SelectByUser(string un)
{
DataTable dt = new DataTable();
string cmdText = "select * from P_Admin where P_adminame=@P_adminame";
SqlParameter[] para = new SqlParameter[] {
new SqlParameter("@P_adminame", un) };
dt = sqlhelper.ExecuteQuery(cmdText, para, CommandType.Text);
return dt;
}
//双参―――――――――――――――――――――――――――
public DataTable SelectAdmin(string username, string userpwd)
{
DataTable dt = new DataTable();
string cmdText = "select * from P_Admin where P_adminame=@P_adminame and P_adminpwd=@P_adminpwd";//
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@P_adminame",username),
new SqlParameter("@P_adminpwd",userpwd)};//
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.Text);
return dt;
}
}
Sqlhelper类:
public class SQLHelper
{
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper()
{
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
conn = new SqlConnection(connStr);
}
public SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{ conn.Open(); }
return conn;
}

//带参查询
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}
}


我不知道怎么回事,传一个参数可以登录成功,两个参数就不行。是不是我的查询语句有问题,还是我用的代码有问题。

传一个参的结果是:i=1 登录成功;
传两个参的结果是:i=0 登录失败;

这里的代码基本完整,求大侠帮帮看看,急用,谢谢!!!


...全文
146 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoon0312 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

C# code

P_AdminManager manager = new P_AdminManager();
string username = TextBox1.Text.Trim();
string userpwd = TextBox2.Text.Trim();
object result = manager.Login(u……
[/Quote]
看了三四遍,总算是看明白了,起初还以为没做密码验证呢。哈哈,谢谢。虽然现在不懂object的运用,不过先留着,以后再把自己的代码完善
  • 打赏
  • 举报
回复

那么多中文括号
  • 打赏
  • 举报
回复

P_AdminManager manager = new P_AdminManager();
string username = TextBox1.Text.Trim();
string userpwd = TextBox2.Text.Trim();
object result = manager.Login(username);
if(result!=null)
{
if(result.ToString().Trim().Equals(userpwd.Trim()))
{
//验证成功
}
esle
{
//密码错误
}
}
else
{
//用户名不存在
}


public object Login(string user)
{
return P_dao.LoginValidate(user);
}



public object LoginValidate(string user)
{
string sql = "SELECT P_adminpwd FROM P_Admin WHERE P_adminame=@user";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@user",user)
};
object obj = sqlhelper.ExecuteScaler(sql,paras,CommandType.Text);
}





public object ExecuteScaler(string cmdText, SqlParameter[] paras, CommandType ct)
{
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
object obj = cmd.ExecuteScaler();
return obj;
}
shoon0312 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

登录的话 没必要这样写的啊
[/Quote]

是吗,那要怎么写才好呢,求赐教
EnForGrass 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 4 楼 的回复:

应该是这句有问题:cmd.Parameters.AddRange(paras);
你在这里设置断点,看参数传进去没有。

这里没问题,不过在这里设断点,还真发现问题了,我存入数据库的密码是经过MD5加密的,在查询时,没有进行转码,哈。不过也谢谢各位啦
[/Quote]
其实我正想说这个我呢提了
  • 打赏
  • 举报
回复
登录的话 没必要这样写的啊
shoon0312 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

应该是这句有问题:cmd.Parameters.AddRange(paras);
你在这里设置断点,看参数传进去没有。
[/Quote]
这里没问题,不过在这里设断点,还真发现问题了,我存入数据库的密码是经过MD5加密的,在查询时,没有进行转码,哈。不过也谢谢各位啦
wangk1000 2012-09-04
  • 打赏
  • 举报
回复

string cmdText = string.format("select * from P_Admin where P_adminame='{0}' and P_adminpwd='{1}'",username,userpwd)
shoon0312 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把你的两个参数的SQL放在数据库里执行一下,看是否有返回结果
[/Quote]
试过了,可以。不过条件中我用的是真值,不懂用参数。你能不能帮我看看,会不会是函数的问题
maoxiongyi1 2012-09-04
  • 打赏
  • 举报
回复
应该是这句有问题:cmd.Parameters.AddRange(paras);
你在这里设置断点,看参数传进去没有。
shoon0312 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把你的两个参数的SQL放在数据库里执行一下,看是否有返回结果
[/Quote]

在数据库中都可以查询,P_adminame=@P_adminame and P_adminpwd=@P_adminpwd 不知道这两个参数用不用引号之类的符号把他括起来,我在数据库中的查询是P_adminame='123' and P_adminpwd='123' ,因为我不会用参数查询,所以只能用真值
事理 2012-09-04
  • 打赏
  • 举报
回复
这样试下
public DataTable SelectAdmin(string username, string userpwd)
{
DataTable dt = new DataTable();
string cmdText = "select * from P_Admin where P_adminame='"+username+"' and P_adminpwd='"+userpwd+"'";//
//SqlParameter[] paras = new SqlParameter[]{
//new SqlParameter("@P_adminame",username),
//new SqlParameter("@P_adminpwd",userpwd)};//
dt = sqlhelper.ExecuteQuery(cmdText, null, CommandType.Text);
return dt;
}
调试下,把cmdText复制到数据库执行下,看下能不能查询到数据
  • 打赏
  • 举报
回复
把你的两个参数的SQL放在数据库里执行一下,看是否有返回结果

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧