SQL查询是否有办法处理没有在SELECT命令中请求的所有列的数据库?
导言 我的Windows窗体应用程序允许我在CAN网络上加载、查看和更改工业控制器网络的设置。这些设置将加载到存储所有信息的数据库中。客户端不时请求新功能,控制器固件也会更新以包括新设置。这些新设置需要加载到数据库中,因此,我向数据库中添加了新的列,以便能够存储它们。除此之外,我还能够加载旧数据库以查看安装的每个控制器的设置 问题描述 我的问题是,每次向数据库添加新列时,我还必须向SQL查询的SELECT命令添加另一个字段。因此,每次我将旧数据库加载到应用程序时,SQL查询都会抛出一个异常,因为我正在请求旧数据库没有的列 当前解决方案 我通过为每种数据库类型创建一个“填充”SQL查询并使用Try-Catch循环解决了这个问题,首先我尝试查询最多的列(设置最多的最新数据库类型),如果抛出异常,我将移动到下一个最大的数据库查询。这样,我必须为每个数据库大小创建一个SQL查询 问题 有没有更干净的方法?我使用的是Visual Studio,目标.NET framework是4.0SQL查询是否有办法处理没有在SELECT命令中请求的所有列的数据库?,sql,database,vb.net,winforms,Sql,Database,Vb.net,Winforms,导言 我的Windows窗体应用程序允许我在CAN网络上加载、查看和更改工业控制器网络的设置。这些设置将加载到存储所有信息的数据库中。客户端不时请求新功能,控制器固件也会更新以包括新设置。这些新设置需要加载到数据库中,因此,我向数据库中添加了新的列,以便能够存储它们。除此之外,我还能够加载旧数据库以查看安装的每个控制器的设置 问题描述 我的问题是,每次向数据库添加新列时,我还必须向SQL查询的SELECT命令添加另一个字段。因此,每次我将旧数据库加载到应用程序时,SQL查询都会抛出一个异常,因为
感谢您的时间和考虑。建议一 针对每种数据库类型保留一个公共列,如“Querykeys”,其中包含逗号分隔的字段名,可用于Select查询,然后您将首先查询该字段,并使用结果字符串创建查询以检索数据 建议二 如果定期更改数据库的列数或列数,则表示设计中存在严重问题
请尝试将新属性添加为子表谢谢您的回答。关于建议1;不幸的是,它不能与预先存在的客户数据库一起工作,因为它们没有“Querykeys”列。关于建议2;我不熟悉VB.NET和SQL查询,请更详细地解释一下子表是什么意思?如果您的应用程序不知道存在哪些列,那么它似乎必须使用一个
DbDataAdapter
FillSchema(…)
方法来获取可用列,用于确定用户界面中显示的输入字段。