刚接触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");
}
}
说明: 执行当前 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");
}
}
mycmd.commandtext = "select * from [Users] Where UserName=" + "'" + UserName + "'" + " And UserPwd=" + "'" + strMd5 + "'";
//创建适配器并执行命令
OleDbDataReader mydr = mycmd.ExecuteReader();
找不到myconn.createcommand()的定义
看看string mysql = "select * from [Users] Where UserName=" + "'" + UserName + "'" + " And UserPwd=" + "'" + strMd5 + "'";
UserName 和strMd5是不是有空值。
或者看看执行完这句 mysql的内容是不是有问题。
调试看看mysql 是否正确。
看看username与strMd5都是否有值,如果都有的话把mysql的值复制到mysql里面去执行下,就知道哪错了
string mysql = string.Format("select * from [Users] Where UserName='{0}' And UserPwd=0x{1}", UserName, strMd5);
楼主的写法不错吧?
string mysql = ...
OleDbCommand mycmd = new OleDbCommand(mysql, myconn);
OleDbDataReader mydr = mycmd.ExecuteReader();
谢谢各位了
在下初学