“使用 C# 代码在数据库中创建多个表时出错”

问题描述 投票:0回答:1

我尝试使用以下 C# 代码在数据库中创建多个表:

public static bool TriggerDbMassAction_Branch()
{
    bool isCompleted;
    try
    {
        string createSalesTable = "CREATE TABLE IF NOT EXISTS Sales (InvoiceID INT UNIQUE PRIMARY KEY NOT NULL, ModelID VARCHAR(255) NOT NULL, BrandID VARCHAR(255) NOT NULL, QuantitySold INT NOT NULL, SellingPrice FLOAT NOT NULL, SoldTo VARCHAR(255) NOT NULL, CustomerContactInfo VARCHAR(255) NOT NULL, SoldOn TIMESTAMP NOT NULL);";
        using var createSalesTableCommand = new NpgsqlCommand(createSalesTable, con);
        createSalesTableCommand.ExecuteScalar();

        string createPurchasesTable = "CREATE TABLE IF NOT EXISTS Purchases (InvoiceID INT UNIQUE PRIMARY KEY NOT NULL, ModelID VARCHAR(255) NOT NULL, BrandID VARCHAR(255) NOT NULL, QuantityBought INT NOT NULL, BuyingPrice FLOAT NOT NULL, PurchasedFrom VARCHAR(255) NOT NULL, SupplierContactInfo VARCHAR(255) NOT NULL, PurchasedOn TIMESTAMP NOT NULL);";
        using var createPurchasesTableCommand = new NpgsqlCommand(createPurchasesTable, con);
        createPurchasesTableCommand.ExecuteScalar();

        string createTransferInwardsTable = "CREATE TABLE IF NOT EXISTS TransferInwards (TransferID INT UNIQUE PRIMARY KEY NOT NULL, ModelID VARCHAR(255) NOT NULL, BrandID VARCHAR(255) NOT NULL, QuantityTransferred INT NOT NULL, TransferredFrom VARCHAR(255) NOT NULL, SignedBy VARCHAR(255) NOT NULL, TransferredOn TIMESTAMP NOT NULL);";
        using var createTransferInwardsTableCommand = new NpgsqlCommand(createTransferInwardsTable, con);
        createTransferInwardsTableCommand.ExecuteScalar();

        string createTransferOutwardsTable = "CREATE TABLE IF NOT EXISTS TransferOutwards  (TransferID INT UNIQUE PRIMARY KEY NOT NULL, ModelID VARCHAR(255) NOT NULL, BrandID VARCHAR(255) NOT NULL, QuantityTransferred INT NOT NULL, TransferredTo VARCHAR(255) NOT NULL, SignedBy VARCHAR(255) NOT NULL, TransferredOn TIMESTAMP NOT NULL);";
        using var createTransferOutwardsTableCommand = new NpgsqlCommand(createTransferOutwardsTable, con);
        createTransferOutwardsTableCommand.ExecuteScalar();

        string createReturnInwardsTable = "CREATE TABLE IF NOT EXISTS ReturnInwards (ReturnID INT UNIQUE PRIMARY KEY NOT NULL, ModelID VARCHAR(255) NOT NULL, BrandID VARCHAR(255) NOT NULL, QuantityReturned INT NOT NULL, ReturnedFrom VARCHAR(255) NOT NULL, SignedBy VARCHAR(255) NOT NULL,   ReturnedOn TIMESTAMP NOT NULL);";
        using var createReturnInwardsTableCommand = new NpgsqlCommand(createReturnInwardsTable, con);
        createReturnInwardsTableCommand.ExecuteScalar();

        string createReturnOutwardsTable = "CREATE TABLE IF NOT EXISTS ReturnOutwards (ReturnID INT UNIQUE PRIMARY KEY NOT NULL, ModelID VARCHAR(255) FORIEGN KEY NOT NULL, BrandID VARCHAR(255) NOT NULL, QuantityReturned INT NOT NULL, ReturnedTo VARCHAR(255) NOT NULL, SignedBy VARCHAR(255) NOT NULL,    ReturnedOn TIMESTAMP NOT NULL);";
        using var createReturnOutwardsTableCommand = new NpgsqlCommand(createReturnOutwardsTable, con);
        createReturnOutwardsTableCommand.ExecuteScalar();

        string createBranchInventoryTable = "CREATE TABLE IF NOT EXISTS BranchInventory (ModelID VARCHAR(255) UNIQUE PRIMARY KEY NOT NULL, BrandID VARCHAR(255) NOT NULL, Description VARCHAR(255) NOT NULL, QuantityInStock INT NOT NULL, UnitPrice FLOAT NOT NULL, TotalWorth FLOAT NOT NULL);";
        using var createBranchInventoryTableCommand = new NpgsqlCommand(createBranchInventoryTable, con);
        createBranchInventoryTableCommand.ExecuteScalar();

        string createCommitHistoryTable = "CREATE TABLE IF NOT EXISTS CommitHistory (CommitID INT UNIQUE PRIMARY KEY NOT NULL, CommitDescription VARCHAR(255) NOT NULL, CommitDate TIMESTAMP NOT NULL, ApprovalStatus VARCHAR(255) NOT NULL,   ApprovalDate TIMESTAMP);";
        using var createCommitHistoryTableCommand = new NpgsqlCommand(createCommitHistoryTable, con);
        createCommitHistoryTableCommand.ExecuteScalar();

        isCompleted = true;
    }
    catch
    {
        isCompleted = false;
    }

    return isCompleted;
}

代码尝试创建多个表,包括 Sales、Purchases、TransferInwards、TransferOutwards、ReturnInwards、ReturnOutwards、库存和提交。每个表都有自己的一组列和约束。

但是,在执行代码时,我遇到错误消息或意外行为。以下是错误的详细信息:

错误消息显示“抛出异常:System.Private.CoreLib.dll 中的‘Npgsql.PostgresException’”。 具体问题似乎与表定义或SQL语法有关。

我之前没有真正做过任何sql,而且我是c#新手,但我已经检查了代码并确保表定义和SQL语法是正确的。我正在使用 NpgsqlCommand 来执行 SQL 查询。

如果您能提供有关如何解决此问题并在我的数据库中成功创建多个表的任何见解或建议,我将不胜感激。预先感谢您的帮助!

创建了 5 个表,但在创建其余表时出现此错误:

Exception thrown: 'Npgsql.PostgresException' in System.Private.CoreLib.dll

这些是已创建的表:Sales、Purchases、TransferInwards、TransferOutwards、ReturnInwards。其余的都没有。

c# postgresql npgsql
1个回答
0
投票

您的代码已成功执行,直到

returnoutwards
表。因为,在该表中您尝试创建外键,但没有给出reference

例如;

CREATE TABLE t1 (
  a integer PRIMARY KEY,
  b integer,
  c integer,
  FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)
);

对于您的

returnoutwards
表,您需要决定哪个表引用
modelid
表中的
returnoutwards
列,或者如果这是一个错误,您需要将其删除。

© www.soinside.com 2019 - 2024. All rights reserved.