0

ユーザーは、使用する 3 つの接続から選択できます。

  1. スクライト
  2. SQLサーバー
  3. MySQL

現在、同じことを行う3つの方法があります。私はこのようなことをしたい

object obj;

if (connectionchosen == "Sqlite")
  obj = new SqlLiteConnection("connectiongstring);

if (connectionchosen == "MSSQL")
 ojb = new SqlConnection("connectionstring);

if (connectionchosen == "MySQL")
 obj = new MySqlConnection("connectionstring);

どうやら、適切にキャスト/変換されない限り、obj は Sqlite / SQL Server / Mysql メンバーを見ることができないため、上記は実行できません。

上記のIFを使用して上記のobjを3つのうちの1つに変換し、メンバーを使用できるようにするにはどうすればよいですか?

例:

public static bool LOGIN(string USERNAME, string PASSWORD,GLOBALFUNCTIONS.DBS DB)
{
   try
   {
      bool val = false;
      OPENDB(DB);
      object cmd;

      if (DB == GLOBALFUNCTIONS.DBS.SQLLOCAL)
      {
         _CN.SQLLITECMD = new SQLiteCommand("select * from users where        username='" + USERNAME + "' and password='" + _GLOBAL.GLOBALFUNCTIONS.GETMD5(PASSWORD + USERNAME) + "'",_CN.SQLLITELOCAL);
         _CN.SQLLITEREADER = _CN.SQLLITECMD.ExecuteReader();

         if (_CN.SQLLITEREADER.Read())
         {
            val = true;
                            _GLOBAL.GLOBALFUNCTIONS.LOGIN(_CN.SQLLITEREADER[0].ToString(), val, _CN.SQLLITEREADER[2].ToString(), GLOBALVARS.DATABASE);
         }
         else
                            _GLOBAL.GLOBALFUNCTIONS.LOGIN(_CN.SQLLITEREADER[0].ToString(), val, _CN.SQLLITEREADER[2].ToString(), GLOBALVARS.DATABASE);
                        _GLOBAL.GLOBALFUNCTIONS.AUDIT(USERNAME, _CN.SQLLITECMD.CommandText, GLOBALVARS.DATABASE);
    }
    CLOSEDB(DB);
    return val;
}
catch (Exception)
{
   CLOSEDB(DB);
   return false;
}

すべて置き換える

_CN.SQLITECMD/_CN.SQLLITEREADER/_CN.SQLLITELOCAL 

_CN.MSSQLCMD/_CN.MSSQLREADER/_CN.MSSQLLOCAL 

代わりに、3 つの異なる接続すべてに対して単純に CMD/READER/LOCAL を使用したいと考えています。

私は十分に明確であることを願っています。

ありがとうございました。

4

1 に答える 1

2

インターフェイスを中心にコードを作成IDbConnectionすることで、抽象化して具体的な接続タイプにすることができます。

IDbConnection connection;

if (connectionchosen == "Sqlite")
  connection= new SqlLiteConnection("connectiongstring);

if (connectionchosen == "MSSQL")
  connection = new SqlConnection("connectionstring);

if (connectionchosen == "MySQL")
  connection = new MySqlConnection("connectionstring);

コマンドを作成するIDbConnection.CreateCommandには、接続のタイプに応じて正しいタイプのコマンドを作成する方法を使用する必要があります。IDbCommandその後、より具体的な などの代わりに、 でのSqlCommand作業に制限されSQLiteCommandます。つまり、プロバイダー固有の機能にアクセスできなくなります。ただし、基礎となるプロバイダーにとらわれたくない場合は、これが代償です。

(上記のように) 独自のファクトリ ロジックを作成する代わりに、ADO.NET DbProviderFactoriesの上に構築できます。これにより、データ ソースを構成App.configし、実装でプロバイダー固有のコードを回避できます。

于 2013-04-12T07:43:23.917 に答える