我搜索了整个网站,发现the similar issue but with python不是C#。此外,该文章中的解决方法(避免使用DateTimeOffset数据类型查询列)对我没有帮助,因为我的应用程序略有不同。我的MVC Web应用程序需要动态列出SQL Server 2016数据库中的所有表。然后,用户可以从该列表中选择1个表,并在网格中显示所有列及其值。 我在
中使用ODBCdriver = {ODBC Driver 13 for SQL Server}
连接到SQL Server 2016数据库。与数据库的连接成功。尽管Microsoft的this article提到了对ODBC日期和时间增强(特别是对DataTimeOffset)的数据类型支持,但我无法使用DateTimeOffSet数据类型中的列访问表。以下代码返回错误消息“未知数据类型--155”。
OdbcDataAdapter adapter = new OdbcDataAdapter(queryString, con);
您有什么想法吗?
谢谢。
答案 0 :(得分:0)
不要使用ODBC。对SQL Server使用System.Data.SqlClient
中的类,对于Oracle使用ODP.NET中的类。这两个名称空间中的类都实现了System.Data
名称空间中的相应接口-因此您可以使用它们相同-所有您需要的是一个简单的工厂,该工厂将返回任何接口的SQLClient实现或ODP.NET实现您需要使用-像这样的东西:
public enum rdbmsTypes
{
SQLServer,
Oracle
}
public class ADONetFactory
{
private rdbmsTypes _dbType;
private string _connectionString;
public ADONetFactory (rdbmsTypes dbType, string connectionString)
{
_dbType = dbType;
_connectionString = connectionString;
}
public System.Data.IDbConnection GetConnecion()
{
switch(_dbType)
{
case rdbmsTypes.SQLServer:
return new System.Data.SqlClient.SqlConnection(_connectionString);
case rdbmsTypes.Oracle:
return new Oracle.DataAccess.Client.OracleConnection(_connectionString);
}
ThrowNotSupportedException();
}
public System.Data.IDbCommand GetCommand()
{
switch (_dbType)
{
case rdbmsTypes.SQLServer:
return new System.Data.SqlClient.SqlCommand();
case rdbmsTypes.Oracle:
return new Oracle.DataAccess.Client.OracleCommand();
}
ThrowNotSupportedException();
}
private void ThrowNotSupportedException()
{
throw new NotSupportedException("The RDBMS type " + Enum.GetName(typeof(rdbmsTypes), _dbType) + " is not supported");
}
}
那么您应该已经内置了对两个数据库中所有数据类型的支持。