C# 返回类或任何它是

C# 返回类或任何它是,c#,C#,我想从函数返回DataReader。所以我可以使用它,不管它是MySQL还是MS-SQL private void Connection(string Command) { if (DBtype == "MySQL") { MySqlConnection MysqlConnection1 = new MySqlConnection(CS); MySqlCommand MySqlcommand = new MySqlCommand(Co

我想从函数返回
DataReader
。所以我可以使用它,不管它是MySQL还是MS-SQL

private void Connection(string Command)
{       
    if (DBtype == "MySQL")
    {
        MySqlConnection MysqlConnection1 = new MySqlConnection(CS);
        MySqlCommand MySqlcommand = new MySqlCommand(Command, MysqlConnection1);
        MysqlConnection1.Open();
        MySqlDataReader reader = MySqlcommand.ExecuteReader();
    }
    else
    {
        SqlConnection sqlConnection1 = new SqlConnection(CS);
        SqlCommand Sqlcommand = new SqlCommand(Command, sqlConnection1);
        sqlConnection1.Open();
        SqlDataReader reader = Sqlcommand.ExecuteReader();
    }  
}

您可以将方法的返回类型设置为
IDataReader
,因为
SqlDataReader
MySqlDataReader
都实现了这个接口

private IDataReader Connection(string Command)
{
    IDataReader dataReader = null;

    if (DBtype == "MySQL")
    {
        MySqlConnection MysqlConnection1 = new MySqlConnection(CS);
        MySqlCommand MySqlcommand = new MySqlCommand(Command, MysqlConnection1);
        MysqlConnection1.Open();
        dataReader = MySqlcommand.ExecuteReader();
    }
    else
    {
        SqlConnection sqlConnection1 = new SqlConnection(CS);
        SqlCommand Sqlcommand = new SqlCommand(Command, sqlConnection1);
        sqlConnection1.Open();
        dataReader = Sqlcommand.ExecuteReader();
    }  

    return dataReader;
}

此外,我认为您应该将数据库的类型作为参数传递给
连接
方法。

是否查看它们是否共享一个公共基类?提示:是的。最好的办法是返回并尝试使用ODBC(
OdbcConnection
等)-它会统一数据库。但是如果你想返回一些东西,为什么你的方法是无效的?是的,但我有IDataReader dossent的问题。有没有什么好的小解决方案,然后它就不是金子了?@Kaalund有一件事我会试试,如果我在你的位置上,它将使用
while
while(dataReader.Read())
。通过这种方式,您可以检查
dataReader
是否有行,并且在
while
的每个步骤中,当条件为
true
dataReader.Read()==true
时,读取当前值。