1

对于了解 C# 的人来说,这一定是一个非常简单的问题,但我有点迷茫。

DbConnection派生自IDbConnection; 类OleDbConnectionOdbcConnection. 我需要objConnection要么OleDbConnection要么OdbcConnection

string connStr = CONNECTION_STRING.Replace("<FILENAME>", fullFileName);
IDbConnection objConnection = (myswitch) ? (IDbConnection)new OdbcConnection(connStr) 
                                         : (IDbConnection)new OleDbConnection(connStr);
objConnection.Open();
objConnection.GetSchema(...);
objConnection.Close();

DbConnection无法实例化,但有一个GetSchema我想调用的方法(我也调用openand close)。IDbConnection 没有这些方法Cast toDbConnection不起作用。有没有办法在没有大量if重复代码的情况下实现这些调用?

编辑:我正在使用这些连接来读取 Excel 文件,显然我需要 64 位机器的 OdbcConnection (不确定,仍在调查)

4

2 回答 2

2

代替:

IDbConnection objConnection = (myswitch) ? (IDbConnection)new OdbcConnection(connStr) 
                                     : (IDbConnection)new OleDbConnection(connStr);

和:

// no need to cast here.
DbConnection objConnection = (myswitch) ? new OdbcConnection(connStr) 
                                     : new OleDbConnection(connStr);

由于DbConnectionimplements IDbConnection,使用类而不是接口没有问题。

事实上,在这种特定情况下,它应该是首选方式,因为类有你需要的东西,但接口没有。这样,您的objConnection变量将能够使用Dbconnection' 的方法和属性,而不会出现任何编译器错误。

于 2013-06-07T12:11:53.657 回答
-2
    SqlConnection con = new SqlConnection();
    con.ConnectionString = ConnectionString;
    insertCommand.Connection = con;
    con.Open();
    affectedRows = insertCommand.ExecuteNonQuery();
    con.Close();

你不能用这种方法吗??

于 2013-06-07T11:48:31.740 回答