第一类:
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

解决方案 »

  1.   

    int count = (int)Command.ExecuteScalar();
    =======int count = 0;
    object o = Command.ExecuteScalar();if( o == null) //表求没有查到数据,登录失败
    {}else
    {
     count  = (int)o;
    }
      

  2.   

    楼上正解!
    int count = (int)Command.ExecuteScalar();
    Command.ExecuteScalar()方法返回的是对象,对象可以为任意值,如果不加以判断就转换类型就容易出错,null是无法专成int的。
    所以正确做法应该是先判断对象是否为空!
      

  3.   

    最后一个问题:
    插入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参数正常能正常操作。换成上面语句就不行。
      

  4.   

    单引号的问题..
    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了..