0

SQLクエリを実行する関数があります。レジストリ値に応じて、SQL Server または SQL Server Compact Edition にヒットします。SQL Server CE を使用している場合、recordSet 変数を設定する行は次のようになります。

SqlCeDataReader recordSet = da.ExecuteSQLCommand(selectCommand);

SQL Server の場合、次のようになります。

SqlDataReader recordSet = da.ExecuteSQLCommand(selectCommand);

関数の先頭にある if/then ステートメントにこれらすべてを入れようとしていますが、if/then 内で Type を設定する方法がわかりません。ここに私の(部分的な)コードがあります:

public static string SqlQuery(string selectCommand, int regval)
{
    var recordSet = null;
    string selectCommand = "select * from whatever";

    if (regval == 0)
    {
        SqlDataReader recordSet = null;
    }
    else
    {
        SqlCEDataReader recordSet = null;
    }

    recordSet = da.ExecuteSQLCommand(selectCommand);
}

問題は、if/else の前に recordSet 変数を宣言しないと、後で使用できないことです。ただし、if/else の前に宣言すると、型を変更できません。

4

1 に答える 1

8

そんなことはできません。変数の型は、使用しない限り、コンパイル時に実際に設定されますdynamic

共通のインターフェースを使用できますIDataReader。MySQL や SQLite などの他の標準 ADO.NET クライアントもこれを実装しています。

編集

ここにサンプルがあります

public static string SqlQuery(string selectCommand, int regval)
{
    IDataReader recordSet = null;
    string selectCommand = "select * from whatever";
    recordSet = da.ExecuteSQLCommand(selectCommand);
}
于 2013-04-08T13:53:57.073 に答える