如何在纯 C# 中使用 PL/SQL?

Posted

技术标签:

【中文标题】如何在纯 C# 中使用 PL/SQL?【英文标题】:How to use PL/SQL with pure C#? 【发布时间】:2014-06-25 12:03:27 【问题描述】:

我详细阐述了这段小代码来开始我的婴儿步骤。连接很好。简单的OdbcDataReader 选择工作正常。但我无法测试任何 PL/SQL 函数。它是如何工作的 ?我需要安装额外的东西还是做错了什么?

some inspiration

using System;
using System.Data.Odbc;

namespace ConsoleApplication1

    class Program
    
        static void Main(string[] args)
        
            string connectionString = "dsn=TEST;uid=read;pwd=___";
            OdbcConnection con = new OdbcConnection(connectionString);
            con.Open();

            try
            
                OdbcCommand cmd = new OdbcCommand("begin end;", con);
                int result = cmd.ExecuteNonQuery();
                cmd.Dispose();
            
            catch (Exception exception)
            
                Console.WriteLine(exception);
            

            con.Close();
            con.Dispose();

            Console.ReadKey();
        
    

PL/SQL 程序显然是:

begin
end;

错误信息如下:

System.Data.Odbc.OdbcException (0x80131937): ERROR [HY000] [Oracle][ODBC][Ora]OR
A-06550: line 1, column 7:
PLS-00103: Encountered the symbol "END" when expecting one of the following:

    begin declare exit for goto if loop mod null pragma raise
    return select update while <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall
    <a single-quoted SQL string>

【问题讨论】:

你试图测试什么 pl/sql 函数? @DanBracuk:begin end;。它在问题中。 如果这是一个函数,它应该做什么? @DanBracuk 这里不应该做任何事情。这是学习新事物的婴儿步骤方法。请检查问题的第一段。 【参考方案1】:

我认为您的错误出在 PL/SQL 方面,而不是 c# 代码方面。

这是无效的,因为在 beginend 之间需要一个语句:

begin end;

这不是无效的,因为它包含一个语句,虽然它是null;

begin null; end;

【讨论】:

以上是关于如何在纯 C# 中使用 PL/SQL?的主要内容,如果未能解决你的问题,请参考以下文章

如果我在 PL/SQL 中有文件的路径,如何获取文件夹的数量?

如何在纯 C++ 中高效快速地清理我的 GDI 对象 - winapi(不是 .net,c#)?

在纯 Oracle SQL 中选择所有行作为一个表类型对象

C# 和 PL/SQL 中的 Base64?

在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)

如何根据 PL/SQL 变量值检查输入参数值是不是存在作为列表?