【问题标题】:Running oracle script in c#在 C# 中运行 oracle 脚本
【发布时间】:2015-11-27 17:01:30
【问题描述】:

我有一个脚本,其中包含一些用于创建表的 SQL 代码。该脚本包含如下内容:

CREATE TABLE Customer
(
    CustomerID integer PRIMARY KEY,
    FirstName varchar(32) NOT NULL,
    LastName varchar(32) NOT NULL,
    Street varchar(32),
    Phone varchar(32)
)

CREATE TABLE Supplier   
(
    SupplierID varchar(8) PRIMARY KEY,
    Name varchar(32) NOT NULL,
    Street varchar(32),
    Phone varchar(32)  
)

我使用这段代码来运行这个脚本:

try
{
    var content = File.ReadAllText("c:\\users\\vahid\\desktop\\DBAssignment5\\A3\\SchemaSetUp.sql");
    using (var command = new OracleCommand(content) { Connection = conn })
    {
        command.ExecuteNonQuery();
    }
}

catch (Exception ex)
{
    Console.WriteLine("Something's wrong\n");
    Console.WriteLine(ex.ToString());
}

当脚本包含只创建一个表的代码时,它运行良好,但是当我添加代码以创建多个表时,我遇到了这个异常:

谁能告诉我出了什么问题,我应该怎么做才能解决这个问题?

谢谢

【问题讨论】:

  • 尝试在第一个 CREATE TABLE 命令后加分号
  • 我试过了,但是有一个异常提示“无效字符”
  • 可能重复看到问题:stackoverflow.com/questions/17725379/…
  • 将文件拆分成单独的命令。 OracleCommand 可能无法同时处理多个命令。

标签: c# oracle oracle11g


【解决方案1】:

如果您的脚本仅包含 CREATE TABLE、CREATE VIEW 或 GRANT 命令,您可以使用 CREATE SCHEMA 命令:

CREATE SCHEMA AUTHORIZATION husqvik
    CREATE TABLE Customer
    (
        CustomerID integer PRIMARY KEY,
        FirstName varchar(32) NOT NULL,
        LastName varchar(32) NOT NULL,
        Street varchar(32),
        Phone varchar(32)
    )

    CREATE TABLE Supplier   
    (
        SupplierID varchar(8) PRIMARY KEY,
        Name varchar(32) NOT NULL,
        Street varchar(32),
        Phone varchar(32)  
    );

这是单个原子 SQL 命令这一事实的好处是所有表/视图/授权都已创建或不创建。有趣的是,SQL*Plus 不识别这条语句,只执行第二条CREATE TABLE 命令。

否则需要将脚本拆分成多个命令或作为匿名块执行:

BEGIN
    EXECUTE IMMEDIATE
        'CREATE TABLE Customer
        (
            CustomerID integer PRIMARY KEY,
            FirstName varchar(32) NOT NULL,
            LastName varchar(32) NOT NULL,
            Street varchar(32),
            Phone varchar(32)
        )';

    EXECUTE IMMEDIATE
        'CREATE TABLE Supplier   
        (       SupplierID varchar(8) PRIMARY KEY,
            Name varchar(32) NOT NULL,
            Street varchar(32),
            Phone varchar(32)  
        )';
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 2010-09-12
    • 2013-06-24
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多