我的要求是当用户从管理面板创建新公司时创建新数据库。我正在使用asp.net mvc和流畅的迁移器来创建表。但是,最初我需要根据管理员“添加新公司”表单提供的输入创建数据库。要创建的数据库将在postgresql v9.5
中答案 0 :(得分:1)
过去我有类似的要求,我做了一些研究,但是对于创建新数据库,我在fluentmigrator方面并不成功。 对于使用fluentmigrator创建表和索引而言,效果非常好。 因此,我决定使用不带fluentmigrator的c#来创建它,如下所示:
我使用了NpgSQL nuget包,我创建了以下函数来检查数据库是否存在。如果不存在,则需要创建新的
要创建和检查数据库是否存在,您需要使用NpgsqlConnection对象连接到“ postgres”数据库
public static bool DBExists(string connectionStr, string dbname)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStr))
{
string sql = $"SELECT DATNAME FROM pg_catalog.pg_database WHERE DATNAME = '{dbname}'";
using (NpgsqlCommand command = new NpgsqlCommand
(sql, conn))
{
try
{
conn.Open();
var i = command.ExecuteScalar();
conn.Close();
if (i != null && i.ToString().Equals(dbname)) //always 'true' (if it exists) or 'null' (if it doesn't)
return true;
else return false;
}
catch (Exception e) {
Console.WriteLine(e.ToString());
return false;
}
}
}
}
要创建数据库,您可以在NpgsqlCommand上执行ExecuteNonQuery,并将NpgsqlConnection对象连接到postgres数据库。
string sql = "CREATE DATABASE \"dbname\" WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;";
对于我的要求,我还需要创建一个扩展,可以使用下面的查询来创建该扩展
string sql = "CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;";
我希望这会有所帮助。