C# syntax and DbConnection

本文关键字:DbConnection and syntax | 更新日期: 2023-09-27 18:17:34

对于了解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(我也调用 openclose (。IDbConnection 没有这些方法投射到DbConnection不起作用。有没有办法在不大量if和重复代码的情况下实现这些调用?

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

C# syntax and DbConnection

替换:

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);

由于DbConnection实现了IDbConnection,因此使用类而不是接口没有问题。

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

    SqlConnection con = new SqlConnection();
    con.ConnectionString = ConnectionString;
    insertCommand.Connection = con;
    con.Open();
    affectedRows = insertCommand.ExecuteNonQuery();
    con.Close();

你不能用这种方法吗??