这个代码不起作用。谁能告诉我在哪里可以找到用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();
数据库已创建,但我在创建表时遇到一个无声的失败。
你可以将连接字符串
传递给这个函数:
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"]));
});
}
似乎你只是忘记调用m_createtbl_cmd的
方法:
m_createtbl_cmd.ExecuteNonQuery();
您也可以使用 DynORM 库简化它:http://dynorm.codeplex.com/
希望有帮助!
我会这么做:
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