C#语法和数据库连接
对于了解C#的人来说,这一定是一个非常简单的问题,但我有点不知所措 类C#语法和数据库连接,c#,C#,对于了解C#的人来说,这一定是一个非常简单的问题,但我有点不知所措 类DbConnection派生自IDbConnection;类OleDbConnection和OdbcConnection。我需要objConnection是OleDbConnection或OdbcConnection string connStr = CONNECTION_STRING.Replace("<FILENAME>", fullFileName); IDbConnection objConnection
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();
string connStr=CONNECTION\u string.Replace(“,fullFileName”);
IDbConnection objConnection=(myswitch)?(IDbConnection)新的ODBConnection(connStr)
:(IDbConnection)新的OLEDB连接(connStr);
objConnection.Open();
GetSchema(…);
objConnection.Close();
类DbConnection
无法实例化,但它有一个我想调用的方法GetSchema
(我还调用open
和close
)。IDbConnection没有这些方法st toDbConnection
不起作用。有没有一种方法可以实现这些调用而不必使用大的if
和重复代码
编辑:我正在使用这些连接读取Excel文件,显然我需要64位计算机的OdbcConnection(不确定,仍在调查中)
您不能使用此方法吗???替换:
IDbConnection objConnection = (myswitch) ? (IDbConnection)new OdbcConnection(connStr)
: (IDbConnection)new OleDbConnection(connStr);
与:
由于DbConnection
实现了IDbConnection
,因此使用类而不是接口没有问题
事实上,在这种特定情况下,它应该是首选的方法,因为类具有您需要的内容,而接口没有。这样,您的
objConnection
变量将能够使用Dbconnection
的方法和属性,而不会出现任何编译器错误。强制转换到Dbconnection时是否有任何异常?可能只需将objConnection声明为Dbconnection而不是idbconnectional。因此,objConnection.Open()应该用using()包装因此,它在发生异常时得到处置几乎不是一个解决方案,因为OP不适用于与SQL相关的类。她的问题似乎更多地与对象生成问题有关,而与此无关。如果要读取excel文件,请尝试以下操作:Interop打开excel实例(您可以在taskmgr中看到它);这对我来说不方便。谢谢!出现问题,因为默认情况下使用的是外部内部DbConnection类,而不是标准的C#one。但是需要强制转换为DbConnection,因为RHS上的两个表达式都需要具有相同的类型,在这种特殊情况下,C#无法推断该类型需要为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);