c# - ODBC 连接到 SQL Server 2016 时出现错误未知数据类型 -155
问题描述
我在整个网站上进行了搜索,发现了类似的问题,但使用的是 python而不是 C#。此外,该帖子中的解决方法(避免使用 DateTimeOffset 数据类型查询列)对我没有帮助,因为我的应用程序略有不同。我的 MVC Web 应用程序需要动态列出 SQL Server 2016 数据库中的所有表。然后用户可以从该列表中选择 1 个表并在网格中显示所有列及其值。我正在使用 ODBC
driver = {ODBC Driver 13 for SQL Server}
连接到 SQL Server 2016 数据库。与数据库的连接成功。尽管Microsoft 的这篇文章提到了对 ODBC 日期和时间增强的数据类型支持,特别是 DataTimeOffset,但我无法访问包含 DateTimeOffSet 数据类型列的表。以下代码返回错误消息“未知数据类型 --155”。
OdbcDataAdapter adapter = new OdbcDataAdapter(queryString, con);
你有什么想法?
谢谢。
解决方案
不要使用 ODBC。使用System.Data.SqlClient
用于 SQL Server 的类和用于 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");
}
}
那么您应该已经内置了对两个数据库中所有数据类型的支持。
推荐阅读
- c# - 为什么我们在 Visual Studio 生成的 ApplicationDbContext 类中添加模型的属性
- java - Adding Buttons to a JPanel with an existing Button in GUI
- java - DynamoDB appending to multiple lists atomically
- linear-regression - 重复测量的多重回归?
- reactjs - 从其他地方重定向时,React 路由器与路由不匹配
- maven - Maven 3.3.9 版本-“SSLCertificate 不匹配”通过 Maven cmd 出错但在 eclipse 中工作正常
- r - 基于 2 个唯一标识符添加多个数据框
- sql - Rails - 有很多,通过查询获取所有嵌套和父对象
- visual-studio - 是否有 API 可以从 Web 应用程序动态创建站点 Azure 应用程序服务
- ios - CLLocationManager 监控导致 iOS 12 崩溃的区域