工厂模式数据库连接

moa*_*aji 3 c# mysql sql-server design-patterns factory

我正在尝试使用MySQL实现数据库连接上的工厂模式,SQL Server面临奇怪的错误

你调用的对象是空的

在SQL命令对象上

internal class SqlServerDB : IDatabase
{
    private SqlConnection _Connection = null;
    private SqlCommand _Command = null;

    public IDbCommand Command
    {
            get
            {
                if (_Command == null)
                {
                    _Command.Connection = (SqlConnection)Connection;

                    //_Command = new SqlCommand();
                }
                return _Command;
            }
    }

    public IDbConnection Connection
    {
            get
            {
                if (_Connection == null)
                {
                    string connectionString = ConfigurationManager.ConnectionStrings["testSQL"].ConnectionString;
                    _Connection = new SqlConnection(connectionString);
                }
                return _Connection;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

数据库工厂部分:

public static class DatabaseFactory
{
            public static IDatabase CreateDatabase(DBType type)
            {
                switch (type)
                {
                    case DBType.SqlServer:
                        return new SqlServerDB();

                    case DBType.MySql:
                        return new MySQLDB();
                }

                return null;
            }
}
Run Code Online (Sandbox Code Playgroud)

主要方法

static void Main(string[] args)
{
    IDatabase database;
    DBType databaseType = DBType.SqlServer;

    database = DatabaseFactory.CreateDatabase(databaseType);
    IDbConnection connection = database.Connection;

    IDbCommand command = database.Command;
    command.CommandType = CommandType.Text;
    command.CommandText = "select * from User";

    connection.Open();
}
Run Code Online (Sandbox Code Playgroud)

和Enum选择数据库.

小智 5

如果,第一个有错误,

if (_Command == null)
{
    _Command.Connection = (SqlConnection)Connection;
    //_Command = new SqlCommand();
}
Run Code Online (Sandbox Code Playgroud)

可能更像是:

if (_Command == null)
{
    _Command = new SqlCommand();
    _Command.Connection = (SqlConnection)Connection;        
}
Run Code Online (Sandbox Code Playgroud)