问题标签 [sqldatareader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
205 浏览

c# - ReSharper 使用 SqlDataReader 显示警告

当我写这样的东西时:

ReSharper 显示警告reader.Read(),并告诉读者可以null

但在什么情况下它可以为空?据我所知,如果命令不返回任何内容,则阅读器不为空,它什么都没有。

0 投票
7 回答
13826 浏览

c# - 如何从 SqlDataReader 获取列的表名

我有一个从配置文件中获取的 SQL 查询,该查询通常包含 3-6 个连接。

我需要在运行时查找,根据SqlDataReader 所代表的结果集,查找每一列的表名。

以下是一些不起作用的东西:

  • SqlDataReader.GetName 返回列名,但不返回表名。
  • SqlDataReader.GetSchemaTable 返回包含列信息的数据表 - 但所有表名均为空。
  • 查询 information_schema 没有帮助,因为我需要有关当前查询结果的数据(并且列名不是唯一的 - 在不同的表中有同名的列)。

我在控制台应用程序中使用 .net 3.5SP1/C#/SQL Server 2008。

编辑:我知道这对于所有情况都是不可能的,因为“列”可以从多个表、一个函数甚至一个常量表达式组合在一起——我正在寻找在简单情况下有效的东西。

编辑 2:找出它为什么不起作用 - 您可以使用 SqlDataReader.GetSchemaTable 获取表信息,但您必须将 CommandBehavior 设置为 KeyInfo,您可以在 ExecuteReader 调用中执行此操作:

0 投票
3 回答
1381 浏览

asp.net - 当返回一定数量的记录时,SqlHelper.ExecuteReader 结果变化和意外

注意:您可能不需要阅读整篇文章就知道出了什么问题……如果您愿意,可以跳到关于 3 个场景的部分。如果您想了解有关我如何尝试实现此功能以及发生错误的位置的背景信息,请仅阅读开头。

首先,我试图检索Clients存储在CRM_Clients表中的给定callerId.

SelectLiveClientsForCaller我使用该方法从我的控制器中检索客户端。static Instance然后通过DataProvider 类中的方法将消息传递给 DAL :

我的DataProvider类是一个抽象类,它概述了所有SqlDataProvider可用的方法:

在子类SqlDataProvider中,该SelectLiveClientsForCaller方法实际上被处理并调用SqlHelper.ExecuteReader存储过程CRM_Clients_SelectLiveForCaller

最后是存储过程CRM_Clients_SelectLiveForCaller

返回给定的所有未删除的客户端callerid

然后这应该回到线路并从控制器返回结果......

到目前为止,我注意到了 3 个场景

  1. 如果存储过程没有返回记录(通过 sql server mgmt studio 执行),则在调用方法序列时reader.Read()返回 false 并完全跳过它。

  2. 如果从存储过程中返回了 1 条记录(通过 sql server mgmt studio 执行),则在调用方法序列时reader.Read()返回true但枚举结果会给出一条消息,说IEnumerable 返回没有结果

  3. 如果从存储过程返回2条记录(通过sql server mgmt studio执行),调用方法序列时reader.Read()返回true但枚举结果仅返回1条记录而不是2条

谁能解释为什么我在每种情况下都得到这些结果?

如果您需要更多信息,请询问,我会尽快更新。

谢谢,
马特

0 投票
2 回答
3506 浏览

c# - 从 SqlDataReader 返回 Nullable 类型的 C# 性能提升

我有一个简单的方法,它从 DataReader 而不是内置的 GetInt32 返回 Nullable Int32。

我多次调用此方法,并且有一种情况,我可以随时剃掉它是有益的。

谁能建议从 DataReader 中获取可为空的 Int32 的任何替代和更快的方法?

0 投票
3 回答
2646 浏览

c# - SQL 使用 DataReader 从 DB 读取问题

我有一个用户表(tblUsers),其中包含大学工作人员的详细信息。我正在尝试使用与所选模块关联的讲师姓名填充文本框。

我正在获取与特定模块关联的所有用户 ID,测试用户是否是讲师,如果是,那么我将 ID 添加到 ArrayList。

然后我遍历这个数组,并在每次遍历当前 ID 的过程中调用下面的方法。

但是,如果您查看下面的方法,我正在使用 SqlDataReader 并且在从该行读取时遇到错误:

txtLecturerName.Text += myReader["First_Name"].ToString();

错误消息是:'myReader["First_Name"]' 引发了类型为 'System.IndexOutOfRangeException' 的异常

我使用的表格布局在方法代码下方。对此的任何帮助将不胜感激,我只需一杯咖啡就可以将头穿过屏幕。

tbl用户:

0 投票
2 回答
330 浏览

c# - 如何从一个方法中填充多种类型的业务对象?

我有四个不同的业务对象,每个对象都调用其对应的 FillBusinessObject 方法来一一填充所有单独的对象属性。现在我希望创建一个应该能够填充每种类型的业务对象的通用方法。我创建了一个基类,所有业务对象都从该基类继承,但我无法弄清楚如何从通用方法中填充单个对象属性。

这可能(如果是,那么如何)还是我在梦境中?

PS我不希望像LINQ那样采取不同的路线。

0 投票
1 回答
1524 浏览

asp.net - 从数据库中检索数据 ASP.NET MVC + Oracle

我有两个表
用户(Userid、Name、PhoneNumber)
应用程序(ApplicationsId、UserId、ApplicationName、ActiveDate)

每个用户将拥有超过 1 个应用程序。

在使用延迟加载的 Nhibernate 中,我可以获取用户数据以及每个用户的所有应用程序。所以,我曾经做一些类似 user.applications[i].Applicationname 的事情来获取所有的应用程序。

但是,现在我如何使用 oracle 命令检索所有应用程序以及用户数据。我知道如何使用连接获得一个应用程序。但是,我如何检索多个应用程序并将其存储在 IList 中。任何帮助是极大的赞赏。谢谢你。

0 投票
3 回答
4919 浏览

c# - SQLCommand.ExecuteReader() 不限于只读语句

显然,ExecuteReader 用于只读,而 ExecuteNonQuery 用于事务。但由于某种原因,即使我使用了 ExecuteReader,我仍然能够运行写入(插入、更新、删除)命令(在 textbox1 中输入)。我的代码有问题还是我误解了 ExecuteReader 的工作方式?

0 投票
2 回答
1994 浏览

mysql - VB.NET 2010 和 MySql - 为懒惰的人处理 DB NULL

我想用来自 MySql 数据库的数据初始化一个类。一些字段可以为空:

假设数据库中的最后两个字段可能为 NULL,因此在该字段上调用 ​​GetString 会导致异常。

在获取每个字段之前,我当然可以编写代码来测试 NULL:

但是,如果您有很多字段,这将是“如果”的噩梦。

为此,我重写了 IIf VB 函数以使其更具类型化,从而避免强制转换:

这样我就可以写出类似的东西:

类型化的IIf在其他情况下效果很好,但不幸的是在这种情况下它不是,因为它是一个普通函数而不是语言关键字,每个 inpout 参数都会在调用期间进行评估,并且当字段为 NULL 时引发异常.

你能想出一个优雅的 if-less 解决方案吗?

0 投票
4 回答
2220 浏览

sql - SqlDataReader 在没有数据时获取行

这非常紧急,我需要在 3 个半小时内提交此申请。

我的应用程序检查数据源以查看数据库中是否存在值,并根据是否找到相关值来更改值。问题是我已经在 SSMS 中使用有问题的值运行了 sql 查询,并且没有返回任何行,但是,我的 DataReader 说它有行。

这意味着我的应用程序报告不准确。这是我的代码:

我删除了与这篇文章无关的代码,但您可能想知道的是:

值是布尔值 AcctNumber 是字符串

由于这是一个工作应用程序,我宁愿不包括 SQL 查询。问题出在读者身上。如果我注释掉Value = True,我会得到正确的信息,但如果忽略它意味着在 Value 应该为 True 的情况下,它也会报告不准确。

提前致谢!

编辑:完整源代码:

在 2010 年 8 月 2 日 (mm/dd/yy) 之前发表的以下评论:

Value只是一个由函数返回的布尔值,表示搜索到的电话号码 ( NumberToCheck) 存在于数据库中。

所以...

val只有在 NumberToCheck(在本例中为 3235553469)存在于数据库中时才会返回 True。

将 NumberToCheck 的值复制到 SSMS 并在那里测试查询后,我可以验证查询是否按预期工作。

不,由于表中的信息量很大(+/- 9.5m 行),我无法填充 DataSet。即使使用“WHERE”过滤器,查询的资源也太繁重,最终以一个结尾,OutOfMemory Exception这就是我使用 DataReader 的原因。

我现在将尝试ExecuteScalarDarryl 作为答案所建议的选项,并将更新结果。