从 VB.NET 项目访问 DB2 数据库的奇怪行为

Posted

技术标签:

【中文标题】从 VB.NET 项目访问 DB2 数据库的奇怪行为【英文标题】:strange behavior accessing DB2 database from VB.NET project 【发布时间】:2013-05-20 04:00:30 【问题描述】:

我们有一个测试环境和一个带有 DB2 数据库和 VB.net 项目的生产环境。我们最近在一个 74 列的表中添加了 4 列,总共有 78 列。我们在测试环境中进行了这种更改已经有一段时间了,但昨天才添加到生产中。在我们的 VB.net 代码(测试和产品)中,我们使用 Select * FROM TABLENAME 语句从数据库中获取一行并显示它。一切都在测试环境中完美运行,但是当我们运行代码并指向生产数据库时,结果中不包含四个新添加的列,并且当我们尝试访问该数据时出现错误。

这就是奇怪的地方。如果我们在 select 语句中明确命名新列,它们就会被包括在内,一切都很好。我知道我们应该明确命名列,作为最佳实践,这就是我们要做的,但我必须弄清楚发生了什么。

进一步观察:

如果我使用 System i Navigator 将 Select * FROM TABLENAME 查询输入到生产数据库中,则会返回所有列,包括 4 个新列。 我们使用完全相同的 VB.NET 代码来访问测试数据库和生产数据库...我们运行项目并将连接字符串从 TestingDB 更改为 ProductionDB,因此,我们消除了不同数据对象版本的可能性(我认为)等。

所以,如果我们使用 System i Navigator(使用SELECT *),这些列就在那里。如果我们在 VB.NET 代码中明确命名它们,这些列就在那里。但是,如果我们在 VB.NET 代码中使用 Select *,则会排除 4 个新列(但仅在生产版本中)。

以前有人见过这种行为吗?

【问题讨论】:

你是在程序中直接使用SQL,还是通过存储过程?另外,您遇到的错误是什么(SQL 代码)? 感谢您的回复。是的,我们直接在代码中创建 SQL 语句……没有存储过程。当我们尝试显示新列时,错误基本上是“该列不存在”。如果我们在对象查看器中查看结果,列不存在。 听起来像是缓存问题。 你是如何添加列的?如果您使用了 ALTER TABLE,您是否检查过它是否完整? @Cyborgx37 这似乎不太可能是 IBM i 环境中的缓存问题(通过使用 System i Navigator 表示)。 【参考方案1】:

尝试删除,然后重新创建您的 ODBC 连接。 似乎连接有“记忆”并且对源的更改不是 反映在连接文件中。

【讨论】:

以上是关于从 VB.NET 项目访问 DB2 数据库的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库 vb.net 将项目添加到 datagridviewcombobox

Visual Studio / VB.Net 2008 IntelliSense 奇怪行为

vb.NET SaveAs 不保存所有 Excel 数据

从 Visual Studio 2010 (VB.NET) 读取访问查询

如何使用 vb.net 从查询创建访问报告

从 VB.NET 调用访问宏问题