C# syntax and DbConnection
本文关键字:DbConnection and syntax | 更新日期: 2023-09-27 18:17:34
对于了解C#的人来说,这肯定是一个非常简单的问题,但我有点迷茫。
类DbConnection
派生自IDbConnection
;类OleDbConnection
和OdbcConnection
。我需要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
(我也调用 open
和 close
(。IDbConnection 没有这些方法投射到DbConnection
不起作用。有没有办法在不大量if
和重复代码的情况下实现这些调用?
编辑:我正在使用这些连接来读取Excel文件,显然我需要64位机器的OdbcConnection(不确定,仍在调查中(
替换:
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();
你不能用这种方法吗??