【问题标题】:Query runs on PL/SQL but doesn't run on ASP.NET查询在 PL/SQL 上运行,但不在 ASP.NET 上运行
【发布时间】:2017-12-02 07:03:58
【问题描述】:

所以我在 SL/SQL 中有这个查询:

DECLARE
UNI VARCHAR(250);
NI VARCHAR(250);
NOME VARCHAR(250);
POSTOO VARCHAR(250);
FINALMENTE VARCHAR(250);
BEGIN
SELECT UNIDADE INTO UNI FROM OWNDB2.T_UNIDADES WHERE SIGUNIDADE = 'DAGI';                                            
SELECT NII INTO NI FROM OWNDB2.T_UNID_CARGO WHERE UNIDADE = UNI AND DETALHE = 'C00';                                            
select NOME INTO NOME from owndb2.t_BASEPES where nii = NI;
select POSTO INTO POSTOO from owndb2.t_BASEPES where nii = NI;
select DESPOSTO INTO FINALMENTE from owndb2.t_CODPOSTO where POSTO = POSTOO;
END;

我在 PL/SQL 中运行此查询,它给了我想要查看的内容,但是当我将此查询粘贴到 Asp.net C# 中时,它只会给出一个错误,指出该查询的语法不正确。 是的,我要连接的数据库是一个 Oracle 数据库,该查询是我在 ASP.Net 项目中使用的数据库的表。

这是我将查询放入 ASP.Net 的方式:

"DECLARE" +
"UNI VARCHAR(250);" +
"NI VARCHAR(250);" +
"NOME VARCHAR(250);" +
"POSTOO VARCHAR(250);" +
"FINALMENTE VARCHAR(250);" +
"BEGIN" +
"SELECT UNIDADE INTO UNI FROM OWNDB2.T_UNIDADES WHERE SIGUNIDADE = 'DAGI';" +                                           
"SELECT NII INTO NI FROM OWNDB2.T_UNID_CARGO WHERE UNIDADE = UNI AND DETALHE = 'C00';" +                                          
"SELECT NOME INTO NOME from owndb2.t_BASEPES where nii = NI;" +
"SELECT POSTO INTO POSTOO from owndb2.t_BASEPES where nii = NI;" +
"SELECT DESPOSTO INTO FINALMENTE from owndb2.t_CODPOSTO where POSTO = POSTOO;" +
"END;"

为什么查询在 PL/SQL 和 ASP.Net 中运行良好,只是给我一个不正确的语法错误?

PS:我只是插入查询,因为这是我遇到的问题,我没有在其后面插入所有的Sqlconnections和sql命令,但查询是我的问题,希望大家理解。

【问题讨论】:

  • 看看空格就知道了。现在你的查询看起来像DECLAREUNI VARCHAR(250);NI VARCHAR(250); ... POSTOO;END;
  • “是的,我要连接的数据库是 Oracle 数据库” - 那你为什么要添加 SQL Server 标记?
  • 您希望收到什么输出?它似乎填充了一些局部变量,然后结束。

标签: sql asp.net oracle plsql


【解决方案1】:

您的 C# 代码中的 SQL 语句缺少空格。
现在您的查询看起来像DECLAREUNI VARCHAR(250);NI VARCHAR(250); ... POSTOO;END;

"DECLARE" +
" UNI VARCHAR(250);" +
" NI VARCHAR(250);" +
" NOME VARCHAR(250);" +
" POSTOO VARCHAR(250);" +
" FINALMENTE VARCHAR(250);" +
" BEGIN" +
" SELECT UNIDADE INTO UNI FROM OWNDB2.T_UNIDADES WHERE SIGUNIDADE = 'DAGI';" +                                           
" SELECT NII INTO NI FROM OWNDB2.T_UNID_CARGO WHERE UNIDADE = UNI AND DETALHE = 'C00';" +                                          
" SELECT NOME INTO NOME from owndb2.t_BASEPES where nii = NI;" +
" SELECT POSTO INTO POSTOO from owndb2.t_BASEPES where nii = NI;" +
" SELECT DESPOSTO INTO FINALMENTE from owndb2.t_CODPOSTO where POSTO = POSTOO;" +
" END;"

应该做到这一点,或者只是通过@"string"将其放入一个长string literal

string query = @"DECLARE
UNI VARCHAR(250);
NI VARCHAR(250);
NOME VARCHAR(250);
POSTOO VARCHAR(250);
FINALMENTE VARCHAR(250);
BEGIN
SELECT UNIDADE INTO UNI FROM OWNDB2.T_UNIDADES WHERE SIGUNIDADE = 'DAGI';                                            
SELECT NII INTO NI FROM OWNDB2.T_UNID_CARGO WHERE UNIDADE = UNI AND DETALHE = 'C00';                                            
select NOME INTO NOME from owndb2.t_BASEPES where nii = NI;
select POSTO INTO POSTOO from owndb2.t_BASEPES where nii = NI;
select DESPOSTO INTO FINALMENTE from owndb2.t_CODPOSTO where POSTO = POSTOO;
END;"

【讨论】:

  • 我明天试试,让你们了解最新情况!
猜你喜欢
  • 2015-05-29
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2022-01-20
相关资源
最近更新 更多