自己是新手,模仿着别人的代码写了一个数据库操作的类(SqlServerDataBase.cs),放在网站根目录下的app_code文件夹里,网站的根目录下还有另一个文件夹userinfo,里面有Register.aspx和Register.aspx.cs两个文件是用户注册的页面,我想在Register.aspx.cs中引用数据库操作的类(SqlServerDataBase.cs)检查用户名是否已经存在,但在添加引用中没有找到这个类,并且在运行Register.aspx的提交按钮的时候提示“System.NullReferenceException: 未将对象引用设置到对象的实例。”
以下是几个文件的代码:
SqlServerDataBase.cs
-----------------
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
    /// <summary>
    /// SqlServerDataBase 的摘要说明
    /// </summary>
    public class SqlServerDataBase
    {
        private string strError = null;
        private int intCount = 0;
        public SqlServerDataBase()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        /// <summary>
        /// 公开方法DBConn,返回数据库连接
        /// </summary>
        /// <returns></returns>
        public SqlConnection DBconn()
        {
            string strConn = "server=local;database=GolbalMeetings;uid=sa;password=";
            try
            {
                return new SqlConnection(strConn);
            }
            catch (Exception)
            {
                return null;
            }
        }
        /// <summary>
        /// 公开属性ErrorMessage,返回错误信息
        /// </summary>
        public string ErrorMessage
        {
            get
            {
                return strError;
            }
        }        /// <summary>
        /// 根据查询语句从数据库检索数据
        /// </summary>
        /// <param name="strSelect">查询语句</param>
        /// <param name="SqlConn">数据库连接</param>
        /// <returns>有数据则返回DataSet对象,否则返回null</returns>
        public DataSet Select(string SelectString, SqlConnection sqlConn)
        {
            strError = "";
            SqlConnection conn;
            if (sqlConn == null)
            {
                conn = DBconn();
            }
            else
            {
                conn = sqlConn;
            }
            try
            {
                //若数据库连接的当前状态是关闭的,则打开连接
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
                SqlCommand selectCommand = new SqlCommand(SelectString, conn);
                selectCommand.CommandType = CommandType.Text;
                mySqlDataAdapter.SelectCommand = selectCommand;
                DataSet myDS = new DataSet();
                mySqlDataAdapter.Fill(myDS);
                return myDS;
            }
            catch (Exception e)
            {
                strError = "数据检索失败:" + e.Message;
                return null;
            }
            finally
            {
                if (conn.State != ConnectionState.Closed)
                {
                    conn.Close();
                }
            }
        }
    }
-----------------------------Register.aspx.cs
----------------------
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace MyRegister
{
    public partial class Register : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.TextBox Email1;
        protected void Page_Load(object sender, EventArgs e)
        {        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string VNum = CheckCode.Text;
            string myEmail = Email.Text.Trim();
            if (VNum != Session["VNum"].ToString() || Session["VNum"].ToString() == null)
            {
                Message.Text = "验证码错误!";
            }
            else if((new SqlServerDataBase().Select("select * from asUserInfo where UserName = '"+Email.Text.Trim()+"'", null)).Tables[0].Rows.Count == 0)//提示此行有错误
                {
                    Response.Write("<script>alert(\"此用户名不存在!\")</script>");
                }
            else
                Response.Redirect("../default.aspx");
        }
    }
}
---------------------
高手们帮帮忙,应该难不到大家,希望50分别打水漂,谢谢……

解决方案 »

  1.   

    SqlServerDataBase ssdb = new SqlServerDataBase();
    ssdb.***就这样简单
      

  2.   

    首先你要引用你要调用的类,并在cs文件中用using导入类的命名空间
      

  3.   

    if ( Session["VNum"] == null || VNum != Session["VNum"].ToString())
      

  4.   

    拆分成下面这段,看看哪一步出错了。
            protected void Button1_Click(object sender, EventArgs e)
            {
                string VNum = CheckCode.Text;
                string myEmail = Email.Text.Trim();
                if (VNum != Session["VNum"].ToString() || Session["VNum"].ToString() == null)
                {
                    Message.Text = "验证码错误!";
                }
                else
                {
                      SqlServerDataBase db = new SqlServerDataBase();
                      DataSet ds = db.Select("select * from asUserInfo where UserName = '"+Email.Text.Trim()+"'", null);
                      if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
                      {
                            Response.Write("<script>alert(\"此用户名不存在!\")</script>");
                      }
                      else
                      {
                            Response.Redirect("../default.aspx");
                      }
            }
      

  5.   

    new SqlServerDataBase().Select("select * from asUserInfo where UserName = '"+Email.Text.Trim()+"'", null)).Tables[0].Rows.Count == 0要把代码提出来,像这样来用:DataSet ds=new SqlServerDataBase()Select("select * from asUserInfo where UserName = '"+Email.Text.Trim()+"'", null));if(ds!=null && ds.Tables.Count>0 && ds.Tables[0].Rows.Count>0)
    {}
    else
    {}像这样的方法最好定义成静态的,类也最好是静态的类,调用起来方便.
      

  6.   

    谢谢楼上的同志们
    我用Snowdust(雪尘) 的代码进行测试,不管我输入的是否存在,都提示用户名不存在,
    正在研究,得出结果立即结贴
      

  7.   

    怀疑那个.CS文件和页面文件不在同一个命名空间,你要到那个页面的文件里引用一下.CS的命名空间 然后NEW 那个.CS的类  然后用NEW的那个类的对象.方法 如果那个方法是静态方法就不用NEW那个类 直接用类名.方法就可以了
      

  8.   

    先实例化一个SqlServerDataBase.cs的对象才能调用它里面的函数
    SqlServerDataBase sqlDB = new SqlServerDataBase();
    sqlDB.DBconn();//连接数据库
    DataSet ds = new DataSet(); //定义个数据源
    ds = sqlDB.Select(传入SQL语句);//调用函数返回结果
    //然后针对ds进行操作,ds就是类似于TABLE详细了解下赫赫。
      

  9.   

    别忘了引用命名空间:
    using 项目名称.app_code;
      

  10.   

    首先你要引用你要调用的类,并在cs文件中用using导入类的命名空间
      

  11.   

    我在类页面(SqlServerDataBase.cs)加了命名空间
    namespace mysqlserver
    {
    ……
    }
    也在调用页面(Register.aspx.cs)加了
    using mysqlserver;
    在测试的时候,不过输入的是否存在都提示用户名不存在,我感觉
    是不是类写错了------------
    还有一个问题,我点“添加引用”还是找不到那个类,不知道怎么回事
    应该在“.net”那个标签里吧?
      

  12.   

    感觉兄弟们顶贴
    问题是解决了,但我并没有添加引用,只是在调用叶面using 了类的命名空间,请问这两者有区别么?
    我再“添加引用里”一直都没有找到那个类名,一直很纳闷马上结贴
      

  13.   

    另外,连接数据库的这段代码好像有问题,不管我输入的用户名是否存在,都提示不存在,后来换了一段代码,就成功了string strConn = "server=local;database=GolbalMeetings;uid=sa;password=";
    换成
    string strConn = "Server=(local);Database=xldf_rhvac_net;Uid=worldpeace;pwd=oneworld&onexldf";
    -------
    希望对后来人有所帮助