如何在c#中使用if/then语句设置变量类型?

Pro*_*ger 0 .net c# sql-server sqldatareader sql-server-ce

我有一个执行SQL查询的函数.根据注册表值,它将命中SQL Server或SQL Server Compact Edition.如果它使用的是SQL Server CE,则设置recordSet变量的行应如下所示:

SqlCeDataReader recordSet = da.ExecuteSQLCommand(selectCommand);
Run Code Online (Sandbox Code Playgroud)

对于SQL Server,它应该如下所示:

SqlDataReader recordSet = da.ExecuteSQLCommand(selectCommand);
Run Code Online (Sandbox Code Playgroud)

我试图将所有这些放在函数开头的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);
}
Run Code Online (Sandbox Code Playgroud)

问题是除非我在if/else之前声明了recordSet变量,否则我不能在之后使用它.但是,如果我在if/else之前声明它,我就无法更改类型.

Dan*_*ite 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);
}
Run Code Online (Sandbox Code Playgroud)