ArcEngine直连sde_arcengine直连sde
ArcEngine直连sde由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“arcengine直连sde”。
ArcEngine直连sde
直连的优势如下(网上摘录):直连方式降低了服务器端的内存需求直连方式处理速度更快,在客户端上执行处理不需要安装ArcSDE软件
本教程以ArcEngine 10.1直连PostgreSQL 9.0.5为例安装PostgreSQL数据库修改%PostgreSQL%9.0datapg_hba.conf文件,添加
“hostallall0.0.0.0/0md5”记录,让任意客户端均可连接你的数据库集群(修改后需重启postgresql-x64-9.0服务以生效)%Program Files%ArcGISDesktop10.1DatabaseSupportPostgreSQLWindows64目录下,拷贝st_geometry.dll文件到%PostgreSQL%9.0lib目录。在PostgreSQL中创建Geodatabase时必须用到此类库配置PostgreSQL的客户端。因为直连方式要求ArcSDE的客户端必须安装数据库的客户端类库,所以首先需要获取PostgreSQL的客户端。ArcGIS Desktop是32位软件,需要的是32位的PostgreSQL类库。
将 libeay32.dll, libiconv-2.dll, libintl-8.dll,libpq.dll,leay32.dll
文件拷贝到%Program Files%ArcGISDesktop10.1bin目录下
如果ArcGIS Server也需要直连到PostgreSQL中,则需要拷贝上述同名的5个64位的库到%Program Files%ArcGISServerbin目录下,因为ArcGIS Server现在是64位的软件了在ArcMap中使用Create Enterprise Geodatabase工具完成“Post Installation”过程。
ArcEngine连接sde代码如下:
一定要注意将“libeay32.dll, libiconv-2.dll, libintl-8.dll,libpq.dll,leay32.dll”复制到应用程序目录下面
///
/// 创建sde连接参数
///
///
服务器IP(直连可以为空)
///
数据库实例(基于服务的连接为5151或者esri_sde,如果是直连则为sde:postgresql:localhost)
///
sde用户名
///
sde用户密码
///
sde版本
///
数据库名称,一般为sde
///
是否直连
///
public IPropertySet CreatePropertySet(string serverIP, string
instance, string user, string paword, string version, string database, bool isDirectConnection)
{
IPropertySet pPropertySet = new PropertySetCla();
pPropertySet.SetProperty(“USER”, user);
pPropertySet.SetProperty(“PASSWORD”, paword);
pPropertySet.SetProperty(“VERSION”, version);
if(isDirectConnection)
{
if(instance.Contains(“:”))
{
pPropertySet.SetProperty(“INSTANCE”, instance);
pPropertySet.SetProperty(“DATABASE”, database);
}
else
{
throw new Exception(“直连字符串参数'instance'不对,例如 sde:postgresql:localhost”);
}
}
else
{
pPropertySet.SetProperty(“SERVER”, serverIP);
pPropertySet.SetProperty(“INSTANCE”, instance);
}
return pPropertySet;
}
//基于服务的连接
private void baseOnEsrisdeToolStripMenuItem_Click(object sender, EventArgs e)
{
IWorkspaceFactory pWorkspaceFactory = new
SdeWorkspaceFactoryCla();
IWorkspace pWorkspace =
pWorkspaceFactory.Open(CreatePropertySet(“192.168.0.40”, “5151”, “sde”, “hy@123456”, “sde.DEFAULT”, “sde”, false), 0);
DebugInfo(pWorkspace);
}
//直连
private void directConnectToolStripMenuItem_Click(object sender, EventArgs e)
{
IWorkspaceFactory pWorkspaceFactory = new
SdeWorkspaceFactoryCla();
IWorkspace pWorkspace =
pWorkspaceFactory.Open(CreatePropertySet(“”,“sde:postgresql:192.168.0.40”, “sde”, “hy@123456”, “sde.DEFAULT”, “sde”, true), 0);
DebugInfo(pWorkspace);
}
{
object names;
object values;
pWorkspace.ConnectionProperties.GetAllProperties(out names, out values);
System.Text.StringBuilder sb = new System.Text.StringBuilder();string[] nameArray =(string[])names;
object[] valueArray =(object[])values;
for(int i = 0;i
{
sb.AppendFormat(“{0}{1}rn”, nameArray[i],valueArray[i]);
}
MeageBox.Show(sb.ToString());
IEnumDatasetName pEnumDatasetName =
pWorkspace.get_DatasetNames(esriDatasetType.esriDTAny);private void DebugInfo(IWorkspace pWorkspace)
IDatasetName tName;
string s = “”;
while((tName = pEnumDatasetName.Next())!= null){
s += tName.Name + “n”;
}
MeageBox.Show(s);
}