连接sde(oracle数据库)server:localhost,instance:"sde:oracle$localhost:1521/"+实例;database:sde,也可以为空;user:oracle用户名;password:oracle该用户登录密码
public IWorkspace workspace;
public IPropertySet propertySet;
public void connection(string server,string instance,string database,string user,string password)
{
propertySet = new PropertySetClass();
propertySet.SetProperty("server", server);//localhost
string strInstance = @"sde:oracle$localhost:1521/" + instance;//
propertySet.SetProperty("instance", strInstance);//如果不行可以尝试sde:oracle:1521/实例,ip/实例,localhost/实例
propertySet.SetProperty("database", database);//sde 可无
propertySet.SetProperty("user", user);
propertySet.SetProperty("password", password);
propertySet.SetProperty("version", "sde.DEFAULT");
IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactory();
workspace = workspaceFactory.Open(propertySet, 0);
}
//矢量数据直接导入sde
public bool importFToSDE(string FilePathFullName,string fileName)//fileName,在sde中创建的要素集的名字
{
try
{
IDataset pDataSet = workspace as IDataset;
FileInfo fileInfo = new FileInfo(FilePathFullName);
string filePath = fileInfo.DirectoryName;//路径,文件夹
string file = fileInfo.Name;//文件名,带后缀的
FeatureClassToFeatureClass(pDataSet, filePath, file, fileName, true);
return true;
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
return false;
}
}
public void FeatureClassToFeatureClass(IDataset pDataSet, string strFeatFileDir, string strFeatFileName, string strOutName, bool isWorkspace)
{
try
{
IWorkspaceFactory pWSF = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
IFeatureWorkspace pFeatureWK = (IFeatureWorkspace)pWSF.OpenFromFile(strFeatFileDir, 0);
IFeatureClass pInFeatureClass = pFeatureWK.OpenFeatureClass(strFeatFileName);
if (pInFeatureClass == null || pDataSet == null)
{
MessageBox.Show("创建失败");
return;
}
IFeatureClassName pInFeatureclassName;
IDataset pIndataset = (IDataset)pInFeatureClass;
pInFeatureclassName = (IFeatureClassName)pIndataset.FullName;
//如果名称已存在
IWorkspace2 pWS2 = null;
if (isWorkspace)
pWS2 = pDataSet as IWorkspace2;
else
pWS2 = pDataSet.Workspace as IWorkspace2;
if (pWS2.get_NameExists(esriDatasetType.esriDTFeatureClass, strOutName))
{
System.Windows.Forms.DialogResult result;
result = System.Windows.Forms.MessageBox.Show(null, "矢量文件名 " + strOutName + " 在数据库中已存在!" + "/r是否覆盖?", "相同文件名", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Information, System.Windows.Forms.MessageBoxDefaultButton.Button1);
//覆盖原矢量要素
if (result == System.Windows.Forms.DialogResult.Yes)
{
IFeatureWorkspace pFWS = (IFeatureWorkspace)pWS2;
IDataset pDataset = pFWS.OpenFeatureClass(strOutName) as IDataset;
pDataset.Delete();
pDataset = null;
}
}
IFields pInFields, pOutFields;
IFieldChecker pFieldChecker = new FieldCheckerClass();
IEnumFieldError pError;
pInFields = pInFeatureClass.Fields;
pFieldChecker.Validate(pInFields, out pError, out pOutFields);
IField geoField = null;
for (int i = 0; i < pOutFields.FieldCount; i++)
{
IField pField = pOutFields.get_Field(i);
if (pField.Type == esriFieldType.esriFieldTypeOID)
{
IFieldEdit pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = pField.AliasName;
}
if (pField.Type == esriFieldType.esriFieldTypeGeometry)
{
geoField = pField;
break;
}
}
IGeometryDef geometryDef = geoField.GeometryDef;
IFeatureDataConverter one2another = new FeatureDataConverterClass();
IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();
IDatasetName pOutDatasetName = (IDatasetName)pOutFeatureClassName;
if (isWorkspace)
pOutDatasetName.WorkspaceName = (IWorkspaceName)pDataSet.FullName;
else
pOutDatasetName.WorkspaceName = (IWorkspaceName)((IDataset)pDataSet.Workspace).FullName;
pOutDatasetName.Name = strOutName;
if (isWorkspace)
{
one2another.ConvertFeatureClass(pInFeatureclassName, null, null, pOutFeatureClassName, geometryDef, pOutFields, "", 1000, 0);
}
else
{
IFeatureDataset pFeatDS = (IFeatureDataset)pDataSet;
IFeatureDatasetName pOutFeatDSName = pFeatDS.FullName as IFeatureDatasetName;
one2another.ConvertFeatureClass(pInFeatureclassName, null, pOutFeatDSName, pOutFeatureClassName, geometryDef, pOutFields, "", 1000, 0);
pOutFeatDSName = null;
pFeatDS = null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
最后成功导入:
问题咨询:152702136(QQ群)
技术合作:1044824695