0

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

select 1
select whatever from wherever

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

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

4

3 回答 3

2

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

select 1;

select whatever from wherever;

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

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

于 2011-02-15T06:20:44.037 回答
0

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

于 2011-02-15T14:35:28.687 回答
0

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

使用查询 SET NOCOUNT ON

在您的选择语句的顶部。

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

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

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

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

句法:

SET NOCOUNT { ON | OFF }
于 2018-09-24T13:38:59.980 回答