c# - 如何使用可选列进行选择?

标签 c# sql oledb

我目前正在开发一个 c# 应用程序,该应用程序从用户指定的访问 (.mdb) 数据库中获取大量数据,并使用该数据执行大量操作。我最近遇到的一个问题是,某些数据库缺少所有其他数据库中都存在的列。

当数据库中不存在列时,如何在数据库上进行选择,但优雅地失败(在数据中抛出 null 或其他东西)?

目前,我的代码看起来像这样:

OleDbConnection aConnection = new 
    OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName);

string sqlQuery = "SELECT [Table1].[Index], [Table1].[Optional Info], 
    [Table2].[Other Info], .... 
    FROM [Table1] INNER JOIN [Table2] ON [Table1].[Index]=[Table2].[Index] 
    ORDER BY [Table1].[Index]";

OleDbCommand aCommand = new OleDbCommand(sqlQuery, aConnection);
OleDbDataReader aReader = aCommand.ExecuteReader();

(proceed to read data in line by line, using fabulous magic numbers)

我认为很明显这是我第一次接触数据库。只要它有效,我并不过分担心,但它已停止为不包含 [Table1].[Optional Info] 列的数据库工作。它抛出一个 OleDbException: "No value given for an or more required parameters."

如有任何帮助,我们将不胜感激。

最佳答案

我可能遗漏了一些东西但是......

SELECT Table1.*, Table2.otherInfo
FROM ...

应该这样做,让客户端处理结果集,但有一个重要警告:无法从上面的 Table1排除一列。

(我不知道有任何方法可以“动态塑造”——从调用者的角度来看——除了上面列列表中的 * 之外的 SELECT。)

快乐编码。

关于c# - 如何使用可选列进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9622917/

相关文章:

c# - 使用静态类/事件作为应用程序消息总线是否存在缺陷

c# - 方法定义中的 operator + 有什么作用?

sql - MSOLEDBSQL 与 MSOLEDBSQL.1 有什么区别?

c# - WHERE 上的 SQL Server 查询错误

c# - 使用 C# SDK 投影到另一种类型

c# - 生成多个属性?

sql - 最佳用户角色权限数据库设计实践?

.net - VFP OleDb 的 Sql 参数化语法错误

excel - 在 Excel 工作表名称中使用井号 (#)

c# - 我可以手动注册/安装 Search.Collat​​orDSO.1