2013-03-15 35 views
0

我想知道是否有人可以帮我解决这个问题。ASP.net c#数据库调用

基本上我有一个Web应用程序,它基于UID搜索一个人的数据库。找到名字后,我打开另一个数据库连接并搜索其管理员电子邮件地址。

但是,我得到的“对象引用未设置为实例”错误,我假设某事是空的,它不喜欢它?那是正确的。

这是我的代码。

public partial class Leaver : System.Web.UI.Page 
{ 


     string Managers_Name = null; 
     string Managers_Email = null; 


protected void Page_Load(object sender, EventArgs e) 
{ 

} 

    protected void Button1_SearchDB(object sender, EventArgs e) 
{ 
    SqlDataReader reader = null; 
    SqlConnection conn = null; 

    try 
    { 
     conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["App_NewStarterConnectionString"].ConnectionString); 

     { 
      conn.Open(); 
      using (SqlCommand cmd = 
       new SqlCommand("SELECT * FROM dbo.tb_starters WHERE Payrol = @Payrol", conn)) 
      { 
       cmd.Parameters.AddWithValue("@Payrol", Payrol.Value); 
       reader = cmd.ExecuteReader(); 



       while (reader.Read()) 
       { 
        Fname.Value = reader["FirstName"].ToString(); 
        Lname.Value = reader["LastName"].ToString(); 
        Payrol.Value = reader["Payrol"].ToString(); 
        section.Value = reader["Section"].ToString(); 
        Managers_Name = reader["Manager"].ToString(); 


       } 

      } 

     } 

    } 
    catch (Exception ee) 
    { 
     throw ee; 
    } 
    finally { 

     GetManagersEmail(); 

     if (reader != null) 
      reader.Close(); 

     if (conn.State == ConnectionState.Open) 
      conn.Close(); 
    } 

} 

protected void GetManagersEmail() 
{ 
    SqlDataReader reader_new = null; 
    SqlConnection conn_new = null; 

    try 
    { 
     conn_new = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["App_NewStarterConnectionString"].ConnectionString); 
     { 
      conn_new.Open(); 
      using (SqlCommand cmd = new SqlCommand("SELECT Email FROM dbo.tb_starters WHERE FullName = @ManagersName", conn_new)) 
      { 
       cmd.Parameters.AddWithValue("@ManagersName", Managers_Name); 
       while (reader_new.Read()) 
       { 
        Managers_Email = reader_new["Email"].ToString(); 
        Response.Write(Managers_Email); 
       } 
      } 

     } 

    } 
    catch (Exception ee) 
    { 
     throw ee; 
    } 
    finally 
    { 

     if (reader_new != null) 
      reader_new.Close(); 

     if (conn_new.State == ConnectionState.Open) 
      conn_new.Close(); 

    } 
} 
+1

使用调试器... – 2013-03-15 11:18:01

+1

堆栈跟踪将是相当有益的 – 2013-03-15 11:18:09

+0

尝试使用Convert.ToString()代替的ToString() – Novice 2013-03-15 11:18:48

回答

0

但是我得到了“对象引用未设置为一个实例”错误,我假设东西是空的,它不喜欢它?那是正确的。

正确。在NULL对象上执行操作会引发该错误。

没有堆栈跟踪,这是一个猜测。

可能的话,你的错误是在这里:

Fname.Value = reader["FirstName"].ToString(); 
Lname.Value = reader["LastName"].ToString(); 
Payrol.Value = reader["Payrol"].ToString(); 
section.Value = reader["Section"].ToString(); 
Managers_Name = reader["Manager"].ToString(); 

如果这些值之一是NULL,一个Object reference not set to an instance会被抛出。

+0

感谢您的帮助。“经理“在数据库中没有正确设置。所以当它试图根据数据提取数据时,它抛出了错误..我想我需要在那里放置一个catch。以防它为空。 – SteveU 2013-03-15 11:43:37

1

弄来的基准为reader_new如您在reader = cmd.ExecuteReader();

曾尝试与

reader_new = cmd.ExecuteReader(); 
0

在开始时不要指定null值,以便您的SqlDataReader对象和SqlConnection的只是定义它们像

SqlDataReader reader; 
    SqlConnection conn ; 

这可能是问题!