2012-12-18 146 views
0

在有人投我的問題之前,我想說這是我第一次在C#中使用類,我做了大量的研究,但仍然遇到錯誤。新手在這裏。爲什麼我在C#類中出現這個錯誤?

我想在類文件中插入,刪除,更新和計數語句,以便我的代碼將整齊。

下面是類文件我做了(有當然的研究幫助):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using MySql.Data.MySqlClient; 
using System.IO; 
using System.Windows.Forms; 

namespace classlib 
{ 
public class DBConnect 
{ 
    private static MySqlConnection mycon; 
    private string server; 
    private string database; 
    private string uid; 
    private string password; 

    public DBConnect() 
    { 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     server = "localhost"; 
     database = "restaurantdb"; 
     uid = "user"; 
     password = "root"; 
     string connectionString; 
     connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; 
     mycon = new MySqlConnection(connectionString); 
    } 

    private static bool OpenConnection() 
    { 
     try 
     { 
       mycon.Open(); 
      return true; 
     } 
     catch (MySqlException ex) 
     { 
      switch (ex.Number) 
      { 
       case 0: 
        MessageBox.Show("Cannot connect to server. Contact administrator"); 
        break; 

       case 1045: 
        MessageBox.Show("Invalid username/password, please try again"); 
        break; 
      } 
      return false; 
     } 
    } 

    private static bool CloseConnnection() 
    { 
     try 
     { 
      mycon.Close(); 
      return true; 
     } 

     catch (MySqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
      return false; 
     } 
    } 


    public static void Insert(string query) 
    { 
     if (OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, mycon); 
      cmd.ExecuteNonQuery(); 
      CloseConnnection(); 
     } 
    } 

    public static void Update(string query) 
    { 
     if (OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(); 
      cmd.CommandText = query; 
      cmd.Connection = mycon; 

      cmd.ExecuteNonQuery(); 
      CloseConnnection(); 
     } 
    } 

    public static void Delete(string query) 
    { 
     if (OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, mycon); 
      cmd.ExecuteNonQuery(); 
      CloseConnnection(); 
     } 
    } 

    public static int Count(string query) 
    { 
     int count = -1; 

     if (OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, mycon); 

      count = int.Parse(cmd.ExecuteScalar() + ""); 

      CloseConnnection(); 

      return count; 
     } 

     else 
     { 
      return count; 
     } 
    } 

} 
} 

我只是想喜歡在某種形式的計數法。這裏是我的代碼:

 MessageBox.Show("NUMBER OF ACCOUNTS IN DATABASE = "+ DBConnect.Count("SELECT count(*) FROM usersettingsdb") +"", "CONFIRMATION"); 

但我得到的OpenConnection()方法的類文件上mycon.Open()行此錯誤:

Object reference not set to an instance of an object. 

如何消除上述誤差,並通過調用訪問方法它像這樣DBConnect.MethodName()

我沒有完全瞭解類,但我真的想知道如何創建我自己的函數/方法,以保持我的代碼整潔。

+7

_「這是我使用C#類第一次」你如何使用C#不類直到現在_ ?? –

+1

你的問題並不是真正的「如何使用類」 - 它是「爲什麼我會得到這個錯誤」。也許改變你的頭銜以反映_actual_問題? – Oded

+0

@Tim是的,我想 –

回答

2

好的,這是因爲你正在搞東西,在某些情況下使用靜態字段,而在其他情況下不使用。有大量關於靜態類/成員的論文,例如參見here

如果您正在使用該類,則不會調用初始化代碼。

你的情況,你應該有一個數據庫連接實例和方法

var db = new DBConnect(); 

刪除static,然後用,爲了使查詢:

db.Count(...); 

另一種解決方法是調用Initialize方法在Count方法中。你應該修改Initialize爲了使它static(你將必須使所有的領域爲static

+1

靜態方法可以調用任何一種方式,ClassName.Method()或ClassInstance.Method()!這是正確的! –

+0

我這樣做 變種DB =新的數據庫連接(); INT NUM = db.Count( 「選擇在usersettingsdb COUNT(*)」); MessageBox.Show( 「」 + NUM); –

+0

結果是什麼?同樣的例外?你是否刪除Count方法中的「靜態」修飾符? –

1

myCon對象在Initialize()方法,這就是所謂的類的構造函數初始化,所以只有當你創建的DbConnect一個實例。

mycon = new MySqlConnection(connectionString); 

在代碼中,你有沒有DbConnect情況下,你只需要調用靜態方法的類Count。所以,myConnull

+0

哦。非常感謝這個解釋! –

相關問題