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 中设置类型。这是我的(部分)代码:

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。其他标准 ADO.NET 客户端(例如 MySQL 和 SQLite)也实现了这一点。

编辑

这是一个示例

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 回答