为了账号安全,请及时绑定邮箱和手机立即绑定

ODBC连接(C#)上的GetSchema(“数据库”)

ODBC连接(C#)上的GetSchema(“数据库”)

C#
慕侠2389804 2021-05-05 17:22:12
我正在用C#测试各种数据库连接方法。特别是,我正在测试SqlConnection和OdbcConnection上课;我的数据库是SQLServer Express(.\SQLEXPRESS)。除列出服务器上的可用数据库外,两者均运行良好。在我的测试代码中,我使用一个"generic" DbConnection对象和一个简单的工厂来创建特定类SqlConnetion和OdbcConnetion子类的实例(它们均源自DbConnection):DbConnection connection;switch (connection_type){case DbConnectionType.DBCONN_MSSQL:   connection = new SqlConnection(...sql connection string...);   break;case DbConnectionType.DBCONN_ODBC:  connection = new OdbcConnection(...odbc connection string...);  break;}除非我尝试获取服务器上的数据库列表,否则该技巧似乎运行良好:DataTable databases = connection.GetSchema("Databases");foreach (DataRow database in databases.Rows){   String databaseName = database["database_name"] as String;   Console.WriteLine(databaseName);}when"connection"是一个OdbcConnection(并且请注意,数据库是相同的),我得到一个例外,说"Databases" key was not found。我列出了公开的所有键GetSchema(),而ODBC版本仅返回SQLServer公开的项的子集。我找不到有关此特定问题的任何提示。它是有记录的/预期的行为吗?难道我做错了什么?注意:这是我如何建立ODBC连接字符串的方法:   OdbcConnectionStringBuilder builder;   builder = new OdbcConnectionStringBuilder();   builder.Driver = "SQL Server";   builder.Add("Server", ".\\SQLEXPRESS");   builder.Add("Uid", "");   builder.Add("Pwd", ""); // Using current user   builder.Add("Integrated Security", "SSPI");   connection = new OdbcConnection(builder.ConnectionString);
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

它是有记录的/预期的行为吗?

是的。请参阅检索数据库架构信息

难道我做错了什么?

如果您的目标是以与提供商无关的方式读取SQL Server元数据,则可以。您应该直接查询SQL Server目录视图。sys.databases,sys.tables等


查看完整回答
反对 回复 2021-05-29
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

确保您的“数据库”模型具有有效的密钥。如果要为该数据库实现的键不遵循“ ClassName” +“ ID”实体框架规则,请添加[Key]数据注释。


查看完整回答
反对 回复 2021-05-29
  • 2 回答
  • 0 关注
  • 285 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信