第一类:
namespace GuestBook.Object
{
public class GbookObject
{
protected OleDbConnection Connection;
protected OleDbCommand Command;
protected OleDbDataAdapter Adapter;
protected OleDbDataReader Reader;
private DataSet Ds;
private string Connstring;
protected GbookObject()
{
Command = new OleDbCommand(); }
//打开数据库连接
public void Open()
{
Connstring = ConfigurationManager.ConnectionStrings["Connstring"].ConnectionString + HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["Datapath"].ConnectionString);
Connection = new OleDbConnection(Connstring);
Connection.Open();
}
//填充DataSet
public DataSet GetDs(string sql)
{
Open();
Adapter=new OleDbDataAdapter(sql,Connection);
Ds=new DataSet();
Adapter.Fill(Ds);
Close();
return Ds;
}
//获取DataReader对象,使用完必须手工关闭对象
public OleDbDataReader GetDataReader(string sql)
{
Open();
Command = new OleDbCommand(sql, Connection);
Reader = Command.ExecuteReader(CommandBehavior.CloseConnection);
Reader.Read();
return Reader;
}
//释放连接资源
public void Close()
{
if (Connection != null)
{
Connection.Close();
Connection.Dispose();
}
if (Command != null)
{
Command.Dispose();
}
if (Adapter != null)
{
Adapter.Dispose();
}
if (Reader != null)
{
Reader.Close();
Reader.Dispose();
}
}
}
}
第二类:
namespace GuestBook.Operate
{
public class GbookOperate : GbookObject
{
public GbookOperate()
{
//
// TODO: Add constructor logic here
//
}
//验证管理员登录
public bool CheckLogin(SysAdmin sa)
{
bool flag = false;
Open();
string sql = "select id from sysadmin where adminName=@adminName and adminPwd=@adminPwd";
Command.Connection = Connection;
Command.CommandText = sql;
Command.Parameters.Add(new OleDbParameter("@adminName", OleDbType.VarChar, 20)).Value = sa.AdminName;
Command.Parameters.Add(new OleDbParameter("@adminPwd", OleDbType.VarChar, 32)).Value = EncryptPassword(sa.AdminPwd);
int count = (int)Command.ExecuteScalar();
if (count>0)
{
flag = true;
}
Close();
return flag;
}cs页面
protected void btnSubmit_Click(object sender, EventArgs e)
{
sa.AdminName = txtName.Text;
sa.AdminPwd = txtPwd.Text;
if (op.CheckLogin(sa) == true && txtCode.Text == Session["CheckCode"].ToString())
{
Response.Write("<script language='javascript'>alert('登录成功,退出可点击后台按钮退出');document.location.href='manager/gbsetup.aspx'</script>");
}
else
{
Response.Write("<script language='javascript'>alert('登录失败,用户名或密码错误')</script>"); }
}
}如果用户名或密码,。验证码正确的话不会有任何提示:
只有其中有一项错误。是不会跳转到else的,而是直接出错。代码如下:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 96: Command.Parameters.Add(new OleDbParameter("@adminName", OleDbType.VarChar, 20)).Value = sa.AdminName;
行 97: Command.Parameters.Add(new OleDbParameter("@adminPwd", OleDbType.VarChar, 32)).Value = EncryptPassword(sa.AdminPwd);
行 98: int count = (int)Command.ExecuteScalar();
行 99: if (count>0)
行 100: {
源文件: e:\site\Gbook 3.0\App_Code\GbookOperate.cs 行: 98 堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
GuestBook.Operate.GbookOperate.CheckLogin(SysAdmin sa) in e:\site\Gbook 3.0\App_Code\GbookOperate.cs:98
Admin_login.btnSubmit_Click(Object sender, EventArgs e) in e:\site\Gbook 3.0\Admin_login.aspx.cs:31
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42
namespace GuestBook.Object
{
public class GbookObject
{
protected OleDbConnection Connection;
protected OleDbCommand Command;
protected OleDbDataAdapter Adapter;
protected OleDbDataReader Reader;
private DataSet Ds;
private string Connstring;
protected GbookObject()
{
Command = new OleDbCommand(); }
//打开数据库连接
public void Open()
{
Connstring = ConfigurationManager.ConnectionStrings["Connstring"].ConnectionString + HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["Datapath"].ConnectionString);
Connection = new OleDbConnection(Connstring);
Connection.Open();
}
//填充DataSet
public DataSet GetDs(string sql)
{
Open();
Adapter=new OleDbDataAdapter(sql,Connection);
Ds=new DataSet();
Adapter.Fill(Ds);
Close();
return Ds;
}
//获取DataReader对象,使用完必须手工关闭对象
public OleDbDataReader GetDataReader(string sql)
{
Open();
Command = new OleDbCommand(sql, Connection);
Reader = Command.ExecuteReader(CommandBehavior.CloseConnection);
Reader.Read();
return Reader;
}
//释放连接资源
public void Close()
{
if (Connection != null)
{
Connection.Close();
Connection.Dispose();
}
if (Command != null)
{
Command.Dispose();
}
if (Adapter != null)
{
Adapter.Dispose();
}
if (Reader != null)
{
Reader.Close();
Reader.Dispose();
}
}
}
}
第二类:
namespace GuestBook.Operate
{
public class GbookOperate : GbookObject
{
public GbookOperate()
{
//
// TODO: Add constructor logic here
//
}
//验证管理员登录
public bool CheckLogin(SysAdmin sa)
{
bool flag = false;
Open();
string sql = "select id from sysadmin where adminName=@adminName and adminPwd=@adminPwd";
Command.Connection = Connection;
Command.CommandText = sql;
Command.Parameters.Add(new OleDbParameter("@adminName", OleDbType.VarChar, 20)).Value = sa.AdminName;
Command.Parameters.Add(new OleDbParameter("@adminPwd", OleDbType.VarChar, 32)).Value = EncryptPassword(sa.AdminPwd);
int count = (int)Command.ExecuteScalar();
if (count>0)
{
flag = true;
}
Close();
return flag;
}cs页面
protected void btnSubmit_Click(object sender, EventArgs e)
{
sa.AdminName = txtName.Text;
sa.AdminPwd = txtPwd.Text;
if (op.CheckLogin(sa) == true && txtCode.Text == Session["CheckCode"].ToString())
{
Response.Write("<script language='javascript'>alert('登录成功,退出可点击后台按钮退出');document.location.href='manager/gbsetup.aspx'</script>");
}
else
{
Response.Write("<script language='javascript'>alert('登录失败,用户名或密码错误')</script>"); }
}
}如果用户名或密码,。验证码正确的话不会有任何提示:
只有其中有一项错误。是不会跳转到else的,而是直接出错。代码如下:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 96: Command.Parameters.Add(new OleDbParameter("@adminName", OleDbType.VarChar, 20)).Value = sa.AdminName;
行 97: Command.Parameters.Add(new OleDbParameter("@adminPwd", OleDbType.VarChar, 32)).Value = EncryptPassword(sa.AdminPwd);
行 98: int count = (int)Command.ExecuteScalar();
行 99: if (count>0)
行 100: {
源文件: e:\site\Gbook 3.0\App_Code\GbookOperate.cs 行: 98 堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
GuestBook.Operate.GbookOperate.CheckLogin(SysAdmin sa) in e:\site\Gbook 3.0\App_Code\GbookOperate.cs:98
Admin_login.btnSubmit_Click(Object sender, EventArgs e) in e:\site\Gbook 3.0\Admin_login.aspx.cs:31
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42
=======int count = 0;
object o = Command.ExecuteScalar();if( o == null) //表求没有查到数据,登录失败
{}else
{
count = (int)o;
}
int count = (int)Command.ExecuteScalar();
Command.ExecuteScalar()方法返回的是对象,对象可以为任意值,如果不加以判断就转换类型就容易出错,null是无法专成int的。
所以正确做法应该是先判断对象是否为空!
插入ACCESS数据库中数据:
sql语句如下:
public void InsertLog(AdminLog log)
{
string sql = "insert into AdminLog(adminName,adminPwd,loginTime,loginIp,adminAgent,isLogin) values(" + log.AdminName + "," + log.AdminPwd + ",#" + log.LoginTime + "#," + log.LoginIp + "," + log.AdminAgent + "," + log.IsLogin + ")";
Open();
Command.Connection = Connection;
Command.CommandText = sql;
Command.ExecuteNonQuery();
Close();
}错误提示:“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------语法错误 在查询表达式 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' 中。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 语法错误 在查询表达式 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)' 中。源错误:
行 150: Command.Connection = Connection;
行 151: Command.CommandText = sql;
行 152: Command.ExecuteNonQuery();
行 153: Close();
行 154: }
源文件: e:\site\Gbook 3.0\App_Code\GbookOperate.cs 行: 152 哪里语法不对?我用Parameters参数正常能正常操作。换成上面语句就不行。
try...string sql = "insert into AdminLog(adminName,adminPwd,loginTime,loginIp,adminAgent,isLogin) values('" + log.AdminName + "','" + log.AdminPwd + "',#" + log.LoginTime + "#," + log.LoginIp + "," + log.AdminAgent + "," + log.IsLogin + ")";我上面只要是将Name和Pwd加上了单个号,不知对不对,总之,是字符串类型的都以单引号就OK了..