0

誰かが私の質問に反対票を投じる前に、C#でクラスを使用するのはこれが初めてであり、多くの調査を行いましたが、まだエラーが発生しています。ここの初心者。

コードを整理するために、Insert、Delete、Update、およびCountステートメントをクラスファイルに入れようとしています。

これが私が作成したクラスファイルです(もちろん研究の助けを借りて):

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()ですか?

クラスについては何もわかりませんが、コードを整理するために独自の関数/メソッドを作成する方法を本当に知りたいです。

4

3 に答える 3

2

これは、静的フィールドを使用している場合と使用していない場合があるためです。静的クラス/メンバーに関する論文はたくさんあります。たとえば、ここを参照してください。

使用しているクラスを使用している場合、初期化コードは呼び出されません。

あなたの場合、DBConnectインスタンスがあり、staticメソッドからを削除する必要があります

var db = new DBConnect();

次に、それを使用してクエリを実行します。

db.Count(...);

Initialize別の解決策は、メソッド内でメソッドを呼び出すことCountです。Initializeあなたはそれを作るために修正するべきstaticです(あなたはあなたのすべてのフィールドをとして作る必要がありますstatic

于 2012-12-18T11:09:59.140 に答える
1

別のユーザーがこの質問に適切に答えます。だから私は別のことを述べたいと思います。あなたのコードはあまり良くありません。使用する代わりに、リポジトリパターンの使用を確認できます。データベースにpetapocoを使用することもできます。これらはあなたの仕事を容易にします。

http://www.remondo.net/repository-pattern-example-csharp/

http://www.toptensoftware.com/petapoco/

于 2012-12-18T11:13:59.163 に答える
1

オブジェクトmyConは、クラスのコンストラクターで呼び出されるメソッドで初期化さInitialize()れるため、のインスタンスを作成する場合にのみ使用されますDbConnect

mycon = new MySqlConnection(connectionString);

コードには、のインスタンスはなく、クラスDbConnectの静的メソッドを呼び出すだけです。Countだから、myConですnull

于 2012-12-18T11:15:45.990 に答える