Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询是否有办法处理没有在SELECT命令中请求的所有列的数据库?_Sql_Database_Vb.net_Winforms - Fatal编程技术网

SQL查询是否有办法处理没有在SELECT命令中请求的所有列的数据库?

SQL查询是否有办法处理没有在SELECT命令中请求的所有列的数据库?,sql,database,vb.net,winforms,Sql,Database,Vb.net,Winforms,导言 我的Windows窗体应用程序允许我在CAN网络上加载、查看和更改工业控制器网络的设置。这些设置将加载到存储所有信息的数据库中。客户端不时请求新功能,控制器固件也会更新以包括新设置。这些新设置需要加载到数据库中,因此,我向数据库中添加了新的列,以便能够存储它们。除此之外,我还能够加载旧数据库以查看安装的每个控制器的设置 问题描述 我的问题是,每次向数据库添加新列时,我还必须向SQL查询的SELECT命令添加另一个字段。因此,每次我将旧数据库加载到应用程序时,SQL查询都会抛出一个异常,因为

导言

我的Windows窗体应用程序允许我在CAN网络上加载、查看和更改工业控制器网络的设置。这些设置将加载到存储所有信息的数据库中。客户端不时请求新功能,控制器固件也会更新以包括新设置。这些新设置需要加载到数据库中,因此,我向数据库中添加了新的列,以便能够存储它们。除此之外,我还能够加载旧数据库以查看安装的每个控制器的设置

问题描述

我的问题是,每次向数据库添加新列时,我还必须向SQL查询的SELECT命令添加另一个字段。因此,每次我将旧数据库加载到应用程序时,SQL查询都会抛出一个异常,因为我正在请求旧数据库没有的列

当前解决方案

我通过为每种数据库类型创建一个“填充”SQL查询并使用Try-Catch循环解决了这个问题,首先我尝试查询最多的列(设置最多的最新数据库类型),如果抛出异常,我将移动到下一个最大的数据库查询。这样,我必须为每个数据库大小创建一个SQL查询

问题

有没有更干净的方法?我使用的是Visual Studio,目标.NET framework是4.0


感谢您的时间和考虑。

建议一

针对每种数据库类型保留一个公共列,如“Querykeys”,其中包含逗号分隔的字段名,可用于Select查询,然后您将首先查询该字段,并使用结果字符串创建查询以检索数据

建议二

如果定期更改数据库的列数或列数,则表示设计中存在严重问题


请尝试将新属性添加为子表

谢谢您的回答。关于建议1;不幸的是,它不能与预先存在的客户数据库一起工作,因为它们没有“Querykeys”列。关于建议2;我不熟悉VB.NET和SQL查询,请更详细地解释一下子表是什么意思?如果您的应用程序不知道存在哪些列,那么它似乎必须使用一个
DbDataAdapter
FillSchema(…)
方法来获取可用列,用于确定用户界面中显示的输入字段。