刚接触C#,对着教程学习,教程用是SQL,我试着改成Access,测试的时候,出现
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。行 61:         OleDbCommand mycmd = new OleDbCommand(myOleDb, myconn);
行 62:         //创建适配器并执行命令
行 63:         OleDbDataReader mydr = mycmd.ExecuteReader();
行 64:         try
行 65:         {
 
63行出错。下面是代码public partial class Manager_Login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {    }
    protected void submit_Click(object sender, EventArgs e)
    {
        //获取用户输入信息
        string UserName = LoginName.Text.ToString();
        string Password = LoginPass.Text.ToString();
        //用户数据加密
        string strMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "md5");
        //Response.Write(strMd5);
        //Response.End();
        if (Session["CheckCode"] == null)
        {
            lblMessage.Text = "系统错误,不能生成验证码";
            lblMessage.Visible = true;
            return;
        }
        if (tbxcheckcode.Text == "")
        {
            lblMessage.Text = "请输入验证码";
            lblMessage.Visible = true;
            return;
        }
        if (String.Compare(Session["CheckCode"].ToString(), tbxcheckcode.Text, true) != 0)
        {
            lblMessage.Text = "验证码错误,请输入正确的验证码。";
            lblMessage.Visible = true;
            return;
        }
        //从web.config中引用连接字符串
        string settings = Convert.ToString(ConfigurationManager.ConnectionStrings["connStr"]); 
        //Response.Write(settings);
        //Response.End();
        //创建数据库连接对象
        OleDbConnection myconn = new OleDbConnection(settings);
        //打开数据库连接
        myconn.Open();
        //读取用户信息
        string mysql = "select * from [Users] Where UserName=" + "'" + UserName + "'" + " And UserPwd=" + "'" + strMd5 + "'";
        //Response.Write(mysql);
        //Response.End();
        //创建命令对象
        OleDbCommand mycmd = new OleDbCommand(mysql, myconn);
        //创建适配器并执行命令
        OleDbDataReader mydr = mycmd.ExecuteReader();
        try
        {
            if (mydr.Read())
            {
                string key = LoginName.Text; //用户名文本框设为cache关键字
                string uer = Convert.ToString(Cache[key]); //读取cache中用户相应的值 
                //判断cache中是否有用户的信息,如果没有相关的值,说明用户未登陆 
                if (uer == null || uer == String.Empty)
                {
                    //定义cache过期时间 
                    TimeSpan SessTimeout = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
                    //第一次登陆的时候插入一个用户相关的cache值, 
                    HttpContext.Current.Cache.Insert(key, key, null, DateTime.MaxValue, SessTimeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);
                    //把用户名写入Session对象
                    Session["LoginName"] = LoginName.Text;
                    //把权限编号写入session对象
                    Session["RoleID"] = mydr[3];
                    Response.Redirect("Default.aspx");
                }
                else
                {
                    //重复登陆 
                    Response.Write("");
                }
            }
            else
            {
                //显示错误信息
                lblMessage.Visible = true;
                lblMessage.Text = "用户名或密码错误";
            }
        }
        finally
        {
            //关闭操作
            mydr.Close();
            myconn.Close();
        } 
    }
    protected void reset_Click(object sender, EventArgs e)
    {
        Response.Redirect("Login.aspx");
    }
}

解决方案 »

  1.   

            OleDbCommand mycmd = myconn.createcommand();
            mycmd.commandtext = "select * from [Users] Where UserName=" + "'" + UserName + "'" + " And UserPwd=" + "'" + strMd5 + "'";
            //创建适配器并执行命令
            OleDbDataReader mydr = mycmd.ExecuteReader();
      

  2.   

    不行啊
    找不到myconn.createcommand()的定义
      

  3.   

    你设置个断点,
    看看string mysql = "select * from [Users] Where UserName=" + "'" + UserName + "'" + " And UserPwd=" + "'" + strMd5 + "'";
    UserName 和strMd5是不是有空值。
    或者看看执行完这句 mysql的内容是不是有问题。
      

  4.   

    string mysql = "select * from [Users] Where UserName='" + UserName + "' And UserPwd='" + strMd5 + "'";
    调试看看mysql 是否正确。
      

  5.   

    看看UserName或strMd5是不是有一个没值
      

  6.   

    string mysql = "select * from [Users] Where UserName=" + "'" + UserName + "'" + " And UserPwd=" + "'" + strMd5 + "'"; 这个设个断点,监视下mysql的值是多少
    看看username与strMd5都是否有值,如果都有的话把mysql的值复制到mysql里面去执行下,就知道哪错了
      

  7.   

    试试这个:
    string mysql = string.Format("select * from [Users] Where UserName='{0}' And UserPwd=0x{1}", UserName, strMd5);
      

  8.   


    楼主的写法不错吧?
    string mysql = ...
    OleDbCommand mycmd = new OleDbCommand(mysql, myconn);
    OleDbDataReader mydr = mycmd.ExecuteReader();
      

  9.   

    数据库 列名 UserPwd  少写了r
    谢谢各位了
    在下初学