我正在尝试在C#中使用ODBCdataadapter来运行查询,该查询需要将一些数据选择到临时表中作为预备步骤。但是,这个初始的select语句导致查询终止,以便将数据放入临时表中,但是我无法运行第二个查询来解决它。我已经确定问题是在单个dataadapter查询中存在两个select语句。也就是说以下代码只运行第一个选择:
select 1
select whatever from wherever
当我直接通过SQL Server Management Studio运行我的查询时,它工作正常。有没有人遇到过这种问题?我以前使用相同的C#代码(仅连接字符串不同)尝试了类似数据库上的完全相同的查询,并且没有问题。
在你提问之前,临时表是有用的,否则我会运行大量的内部select语句,这会使数据库陷入困境。
答案 0 :(得分:1)
假设您正在执行命令类型为CommandText的命令,则需要;
来分隔语句。
select 1;
select whatever from wherever;
如果可能,您可能还需要考虑使用存储过程。您还应该使用SQL client对象而不是ODBC客户端。这样您就可以利用其他方法无法获得的其他方法。你也应该得到更好的性能。
如果需要支持多个数据库,可以使用DataAdapter类并使用Factory来创建具体类型。这为您提供了使用本机驱动程序而不依赖于特定后端的好处。支持多个后端的ORMS通常会这样做。企业库数据访问应用程序块虽然不是ORM,但也可以这样做。
答案 1 :(得分:0)
不幸的是,我没有对数据库的写访问权限,因为我的组织只是为了将信息提取到数据仓库而签约。该程序是一个广泛用于多个系统的程序,这就是我们使用ODBC的原因。我想用SQL管理对象重写它并不会很糟糕。
答案 2 :(得分:0)
ODBC连接需要单个select语句及其从SQL Server的检索。 如果需要任何此类功能,黑客可以达到目的
使用查询
function update(nalogID)
<%updatePrikaceniDoc("7789")%>
__doPostBack('updatePrikaceniDoc', nalogID);
}
在选择语句的顶部。
当SET NOCOUNT为ON时,不返回计数(指示受Transact-SQL语句影响的行数)。当SET NOCOUNT为OFF时,返回计数。它与任何SELECT,INSERT,UPDATE,DELETE语句一起使用。 SET NOCOUNT的设置是在执行或运行时设置的,而不是在解析时设置的。 SET NOCOUNT ON主要提高存储过程(SP)的性能。 语法:SET NOCOUNT {ON |关闭}