常用名词解释
Dbclient | 即DBMS类型,包括SQLServer 、Oracle10g 、Oracle11g 、PostgreSQL 、Informix 、DB2 、DB2ZOS |
Serverinstance | 数据库的名字 |
Database | 具体数据库 |
authentication_mode | 身份验证方式,包括DBMS(有效用户名验证)和OSA(操作系统身份验证),默认为DBMS |
user | 用户名 |
password | 密码 |
代码连接pgsql
public IFeatureLayer OracleQueryLayer()
{
// 创建SqlWorkspaceFactory的对象
Type pFactoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SqlWorkspaceFactory");
IWorkspaceFactory pWorkspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(pFactoryType);
// 构造连接数据库的参数
IPropertySet pConnectionProps = new PropertySetClass();
pConnectionProps.SetProperty("dbclient", "postgresql");
pConnectionProps.SetProperty("serverinstance", "localhost,5432");
pConnectionProps.SetProperty("authentication_mode", "DBMS");
pConnectionProps.SetProperty("database", "postgres");
pConnectionProps.SetProperty("user", "postgres");
pConnectionProps.SetProperty("password", "171866");
// 打开工作空间
IWorkspace workspace = pWorkspaceFactory.Open(pConnectionProps, 0);
ISqlWorkspace pSQLWorkspace = workspace as ISqlWorkspace;
//获取数据库中的所有表的名称
IStringArray pStringArray = pSQLWorkspace.GetTables();
for (int i = 0; i < pStringArray.Count; i++)
{
MessageBox.Show(pStringArray.get_Element(i));
}
// 构造过滤条件 SELECT \* FROM PointQueryLayer
IQueryDescription queryDescription = pSQLWorkspace.GetQueryDescription("SELECT * FROM PointQueryLayer");
ITable pTable = pSQLWorkspace.OpenQueryClass("QueryLayerTest", queryDescription);
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = pTable as IFeatureClass;
return pFeatureLayer;
}
用IWorkspaceFactory2.OpenFromString方法
Type factoryType =Type.GetTypeFromProgID("esriDataSourcesGDB.SqlWorkspaceFactory");
IWorkspaceFactory2workspaceFactory2=(IWorkspaceFactory2) Activator.CreateInstance(factoryType);
String[] connectionProps =
{
"dbclient=SQLServer", "serverinstance=MyMachine\\SqlExpress",
"database=MyDatabase", "authentication_mode=OSA"
};
String connString = String.Join(";", connectionProps);
IWorkspace workspace = workspaceFactory2.OpenFromString(connString, 0);