验证登陆取用户名SESSION,并且在index.aspx页显示用户名以及权限(登陆不需要将工程代码与用户名一起验证)。下拉列表字段(gcdm),存储在gcdm表内,用户名、密码、权限存储在userinfo表内
以下是部分代码
Session["UserName"]= null;
Session["oskey"]= null;
OleDbConnection cn = new OleDbConnection(dataclass.Dbconn.DBConn_Data);
cn.Open();
//userinfo表存储用户名、密码、权限信息
//gcdm表存储工程代码(gcdm)
OleDbCommand cmd = new OleDbCommand("select userinfo.UserName,userinfo.oskey,gcdm.name,gcdm.gcdm from userinfo CROSS JOIN gcdm where (UserName='"+txtName.Text+"' and Password='"+txtPwd.Text+"')" , cn);
OleDbDataReader dr=cmd.ExecuteReader();
if( dr.Read()) 
{   

Session["UserName"]= dr["UserName"].ToString();用户名
Session["oskey"]=dr["oskey"].ToString();权限
Session["gcdm"]=dr["gcdm"].ToString();
Response.Redirect("index.aspx");
}
else 
{
this.h_error.Value = "错误的用户名或者密码!";
}
cn.Close();没有错误提示,只不过gcdm字段显示的不是当前用户名对应的工程代码,是数据库内的第一条工程代码记录
是不是我的数据库有问题?
userinfo表【UserName】【Password】【oskey(权限)】
gcdm表【name(与UserName是一个意思】【gcdm】。两个表是一对多的关系,一个人可能有几个工程代码。

解决方案 »

  1.   

    CROSS JOIN 改成INNER JOIN试试?
      

  2.   

    改了,还是不行,提示System.Data.OleDb.OleDbException: 在关键字 'where' 附近有语法错误。
      

  3.   

    哈哈,出错的时候,自认为代码没问题的话,就是 SQL 的问题了,下个断点,放到查询分析器中分析一下就OK了
      

  4.   

    OleDbCommand cmd = new OleDbCommand("select userinfo.UserName,userinfo.oskey,gcdm.name,gcdm.gcdm from userinfo CROSS JOIN gcdm where (UserName=username UserName='"+txtName.Text+"' and Password='"+txtPwd.Text+"')" , cn);试试!
      

  5.   

    改成UserName=name已经OK了,谢谢楼上,结帖给分