上一篇文章已经在postgreSQL中成功地新建了一个数据库,现在需要连接这个新建的数据库。在ArcGIS中对应的操作为ArcCatalog中Database Connection -->Add Database Connection。
参考ArcGIS中连接地理数据库的工具,基于DevExpress插件设计了这一功能的界面:
在选择了数据库类型,输入了IP、用户密码之后需要点击数据库名称下拉框选择我们想要打开的数据库,在点击数据库名称动作下添加遍历数据库名称的方法,项目用的是postgreSQL数据库,因此,需要引用.net连接postgreSQL数据库的dll,他们分别是“Mono.Security.dll”和“Npgsql.dll”,相关文件在github项目文件夹下的"Resource"文件夹下,这是遍历数据库名称的方法:
/// <summary>
/// 遍历服务器中所有postgreSQL数据库
/// </summary>
/// <param name="ip">服务器IP地址</param>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <returns>返回服务器所有postgresSQL数据库名的列表</returns>
public List<string> GetAllPGDataBase(string ip, string username, string password)
{
List<string> DBNameList = new List<string>();
string connectionString = "Server="+ip+";Port=5432;User Id="+username+";Password="+password+";Database=template1;";
NpgsqlConnection conn = new NpgsqlConnection(connectionString);
try
{
conn.Open();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
NpgsqlCommand command =new NpgsqlCommand("select datname from pg_database",conn);
NpgsqlDataReader reader= command.ExecuteReader();
while (reader.Read())
{
for(int i = 0; i < reader.FieldCount; i++)
{
DBNameList.Add(reader[i].ToString());
}
}
conn.Close();
return DBNameList;
}
遍历完数据库名称之后并选择连接的数据库之后,就可以连接数据库了,这是连接数据库的方法:
/// <summary>
/// 添加数据库连接,连接的数据库类型为PostgreSQL,Oracle等
/// </summary>
/// <param name="type">数据库类型,如postgresql,Oracle等</param>
/// <param name="IP">IP地址</param>
/// <param name="database">数据库</param>
/// <param name="user">用户名</param>
/// <param name="pwd">密码</param>
///
public void ConnectPGDB(string type,string IP,string database ,string user,string pwd)
{
IAoInitialize m_AoInitialize = new AoInitialize();
//必须添加ArcServer许可
m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcServer);
IPropertySet pPropertySet = new PropertySetClass();
pPropertySet.SetProperty("SERVER", IP);
pPropertySet.SetProperty("INSTANCE", "sde:"+type+":"+IP);
pPropertySet.SetProperty("DATABASE", database);
pPropertySet.SetProperty("USER", user);
pPropertySet.SetProperty("PASSWORD", pwd);
pWorkspace = pWorkspaceFactory.Open(pPropertySet, 0);
MessageBox.Show("数据库连接成功");
}
这里一定要注意代码的健壮性,传递参数的时候一定要检查参数是否已经赋值。
另外,我在写代码的时候最开始没有添加ArcServer许可一直报错,所以我也总结出了经验,如果觉得自己的代码没有问题,检查一下是否在界面中添加了axLicense控件,在program.cs中是否加了那两句话等等。没办法,ArcEngine就是比较奇怪。
本功能的代码已上传至github,欢迎各位朋友完善代码,多多交流,https://github.com/ranhongwu/190702ConnectGDB