当前位置: 首页 > 知识库问答 >
问题:

Postgresql -创建数据库

申屠昌胤
2023-03-14

这个代码不起作用。谁能告诉我在哪里可以找到用C#动态创建Postgresql数据库和表的例子?

     const string connStr = "Server=localhost;Port=5432;
                          User Id=postgres;Password=enter;Database=postgres";

        var m_conn = new NpgsqlConnection(connStr);

        // creating a database in Postgresql
        m_createdb_cmd = new NpgsqlCommand("CREATE DATABASE IF NOT EXISTS  \"testDb\" " +
                                       "WITH OWNER = \"postgres\" " +
                                       "ENCODING = 'UTF8' " +
                                       "CONNECTION LIMIT = -1;", m_conn);

        // creating a table in Postgresql
        m_createtbl_cmd = new NpgsqlCommand(
            "CREATE TABLE MyTable(CompanyName VARCHAR(150))";

        m_conn.Open();
        m_createdb_cmd.ExecuteNonQuery();
        m_createtbl_cmd.Connection = m_conn;
        m_conn.Close();

数据库已创建,但我在创建表时遇到一个无声的失败。

共有3个答案

丌官皓君
2023-03-14

你可以将连接字符串传递给这个函数:

  private static string GetConnectionString(string postgreSqlConnectionString)
        {
            NpgsqlConnectionStringBuilder connBuilder = new()
            {
                ConnectionString = postgreSqlConnectionString
            };

            string dbName = connBuilder.Database;

            var masterConnection = postgreSqlConnectionString.Replace(dbName, "postgres");

            using (NpgsqlConnection connection = new(masterConnection))
            {
                connection.Open();
                using var checkIfExistsCommand = new NpgsqlCommand($"SELECT 1 FROM pg_catalog.pg_database WHERE datname = '{dbName}'", connection);
                var result = checkIfExistsCommand.ExecuteScalar();

                if (result == null)
                {
                    using var command = new NpgsqlCommand($"CREATE DATABASE \"{dbName}\"", connection);
                    command.ExecuteNonQuery();
                }
            }

            postgreSqlConnectionString = masterConnection.Replace("postgres", dbName);

            return postgreSqlConnectionString;
        }

这将从ConnectionString检索dbname,然后检查它是否已经存在。如果它不存在,它将使用给定的dbname创建一个。

您应该在Startup类的ConfigureService中使用上述函数,如下所示:

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<MyDbContext>(options =>
        {    
                options.UseNpgsql(GetConnectionString(Configuration["YourConnectionString"]));
        });
    }
曾航
2023-03-14

似乎你只是忘记调用m_createtbl_cmd的方法:

m_createtbl_cmd.ExecuteNonQuery();

您也可以使用 DynORM 库简化它:http://dynorm.codeplex.com/

希望有帮助!

空枫涟
2023-03-14

我会这么做:

string connStr = "Server=localhost;Port=5432;User Id=postgres;Password=enter;";
var m_conn = new NpgsqlConnection(connStr);
var m_createdb_cmd = new NpgsqlCommand(@"
    CREATE DATABASE IF NOT EXISTS testDb
    WITH OWNER = postgres
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;
    ", m_conn);
m_conn.Open();
m_createdb_cmd.ExecuteNonQuery();
m_conn.Close();

connStr = "Server=localhost;Port=5432;User Id=postgres;Password=enter;Database=testDb";
m_conn = new NpgsqlConnection(connStr);
m_createtbl_cmd = new NpgsqlCommand(
   "CREATE TABLE table1(ID CHAR(256) CONSTRAINT id PRIMARY KEY, Title CHAR)"
   , m_conn);
m_conn.Open();
m_createtbl_cmd.ExecuteNonQuery();
m_conn.Close();

不建议在这里使用var。我使用它是因为我不知道返回的类型是什么,但你应该。

注意原始字符串的使用(< code>@)。它使字符串构建变得简单。

除非标识符是非法的,否则不要在Postgresql中使用双引号括起来的标识符。这会让你的生活更加艰难。

 类似资料:
  • PostgreSQL 创建数据库可以用以下三种方式: 1、使用 CREATE DATABASE SQL 语句来创建。 2、使用 createdb 命令来创建。 3、使用 pgAdmin 工具。 CREATE DATABASE 创建数据库 CREATE DATABASE 命令需要在 PostgreSQL 命令窗口来执行,语法格式如下: 例如,我们创建一个 runoobdb 的数据库: created

  • 问题内容: 我正在使用PostgreSQL和Spring 4,希望我的应用在运行时自动创建数据库。 我的实体类是: HibernateConfig.java application.properties 但是,当我运行SQL访问表User时,将出现错误:表’User’不存在。 如何使Hibernate自动创建数据库? 问题答案: 该物业将为您解决问题。创建SessionFactory时,它将自动验

  • 我正在使用PostgreSQL和Spring 4,并希望我的应用程序在运行时自动创建数据库。 我的实体类是: HibernateConfig。Java语言 application.properties 但当我运行SQL访问表User时,会出现错误:表“User”不存在。 如何使Hibernate自动创建数据库?

  • 我想通过JDBC创建一个不存在的数据库。与MySQL不同,PostgreSQL不支持语法。实现这一点的最佳方法是什么? 应用程序不知道数据库是否存在。它应该检查,如果数据库存在,应该使用它。因此,连接到所需的数据库是有意义的,如果由于数据库不存在而导致连接失败,则应创建新数据库(通过连接到默认的postgres数据库)。我检查了Postgres返回的错误代码,但找不到任何相关的代码。 实现这一点的

  • 本文向大家介绍postgresql 创建角色和匹配的数据库,包括了postgresql 创建角色和匹配的数据库的使用技巧和注意事项,需要的朋友参考一下 示例 为了支持给定的应用程序,您通常会创建一个新角色并与之匹配。 要运行的shell命令如下: 假定pg_hba.conf已经正确配置,可能看起来像这样:            

  • 问题内容: 我正在使用docker-compose部署多容器python Flask Web应用程序。我在理解如何在构建期间如何在postgresql数据库中创建表时遇到了困难,因此我不必使用psql手动添加它们。 我的docker-compose.yml文件是: 我不想输入psql来输入: 我将对如何创建表的指导表示赞赏。 问题答案: 我不想输入psql来输入 您可以简单地使用容器的内置init