【问题标题】:multiple select statements in single ODBCdataAdapter单个 ODBCdataAdapter 中的多个 select 语句
【发布时间】:2011-06-27 09:02:42
【问题描述】:

我正在尝试在 C# 中使用 ODBCdataadapter 来运行一个查询,该查询需要将一些数据选择到临时表中作为初步步骤。但是,此初始选择语句导致查询终止,以便将数据放入临时表中,但我无法运行第二个查询将其取出。我已经确定问题是在单个数据适配器查询中存在两个选择语句。也就是说下面的代码只运行了第一个select:

select 1
select whatever from wherever

当我直接通过 SQL Server Management Studio 运行查询时,它运行良好。有没有人遇到过这种问题?我以前使用相同的 C# 代码在类似的数据库上尝试过完全相同的查询(只有连接字符串不同)并且没有问题。

在你问之前,临时表很有帮助,否则我会运行大量的内部选择语句,这会使数据库陷入困境。

【问题讨论】:

  • 试试这个作为你的第一句话:set nocount on

标签: sql sql-server odbc dataadapter


【解决方案1】:

假设您正在执行一个命令类型为 CommandText 的命令,您需要一个 ; 来分隔语句。

select 1;

select whatever from wherever;

如果可能,您可能还想考虑使用存储过程。您还应该使用SQL client 对象而不是ODBC 客户端。这样,您就可以利用其他方法不可用的其他方法。你也应该得到更好的表现。

如果您需要支持多个数据库,您可以只使用 DataAdapter 类并使用工厂来创建具体类型。这为您提供了使用本机驱动程序而无需绑定到特定后端的好处。支持多个后端的 ORMS 通常会这样做。企业库数据访问应用程序块虽然不是 ORM,但也可以做到这一点。

【讨论】:

    【解决方案2】:

    不幸的是,我没有对数据库的写入权限,因为我的组织已签订合同,只是为了将信息提取到数据仓库。该程序是一个通用的用于多个系统的程序,这就是我们使用 ODBC 的原因。我想用 SQL 管理对象重写它不会很糟糕。

    【讨论】:

    • 这可能会更好地评论我的答案或编辑您的问题,而不是另一个答案。
    【解决方案3】:

    ODBC 连接需要一个 select 语句并从 SQL Server 中检索它。 如果需要任何此类功能,Hack 可以达到目的

    使用查询 SET NOCOUNT ON

    在您的选择语句的顶部。

    SET NOCOUNTON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。

    SET NOCOUNTOFF 时,返回计数。它与任何 SELECT、INSERT、UPDATE、DELETE 语句一起使用。

    SET NOCOUNT 的设置是在执行或运行时设置的,而不是在解析时设置的。

    SET NOCOUNT ON 主要提高存储过程 (SP) 的性能。

    语法:

    SET NOCOUNT { ON | OFF }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-03
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2015-02-16
      • 1970-01-01
      相关资源
      最近更新 更多