使用Geoprocessor导出ArcSde中的数据,对COM 组件的调用返回了错
方法exportSDE在VS中调试没有问题,发布到IIS后,则报错误:对COM 组件的调用返回了错误 HRESULT E_FAIL 。 google后发现解决问题的方法千篇一律,没一个管用的。 后来在http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=69628 处搜索到一问题,随试了一下创建临时连接文件,得以解决。 ? ? ? ? 此处为报错的代码: ? ? protected void Page_Load(object sender,EventArgs e) ??? { ??????? exportSDE(@"Database Connections/Connection to WIN-5B53I9JIQQ5.sde/sde.SDE.sss120038njs",@"D:/dem/sss120038njs.img"); ??? } ? ? ??? /// <summary> ??? /// 从ArcSde数据库中导出Img栅格数据 ??? /// </summary> ??? /// <param name="strInRaseterName">ArcSde数据库目标数据文件</param> ??? /// <param name="strOutRasterPath">服务器上导出后的全路径</param> ??? public static void exportSDE(string strInRaseterName,string strOutRasterPath) ??? { ? ??????? try ??????? { ??????????? //License初始化,如不初始化,open时会报错 ?? ?????????IAoInitialize m_AoInitialize = new AoInitialize(); ??????????? m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine); ? ??????????? IVariantArray parameters = new VarArrayClass(); ??????????? //Set in_raster. ??????????? parameters.Add(strInRaseterName); ??????????? //Set out_rasterdataset. ??????????? parameters.Add(strOutRasterPath); ? ??????????? //Set geoprocessor for execution. ??????????? Geoprocessor geoprocessor = new Geoprocessor(); ??????????? geoprocessor.OverwriteOutput = true; ??????????? geoprocessor.Execute("CopyRaster",parameters,null); ????????????? ????????} ??????? catch (Exception ex) ??????? { ??????????? throw ex; ??????? } ? ??? } ? ? ? ? 此处为修改后的代码(不要忘记给相应的文件夹加权限): ? protected void Button1_Click(object sender,EventArgs e) ??? { ??????? string strTempPath = @"d:/dem";//d:/dem换成项目里下载的路径 ??????? string strTempName = @"temp.sde";//连接Sde数据库的临时文件名 ??????? string strAllPath = strTempPath + "//" + strTempName;//连接Sde数据库的临时文件存放的全路径 ??????? if (File.Exists(strAllPath)) ??????? { ??????????? File.Delete(strAllPath); ??????? } ??????? IWorkspaceFactory m_pWorkspaceFactory =new SdeWorkspaceFactoryClass(); ??????? IWorkspaceName wsn = m_pWorkspaceFactory.Create(strTempPath,strTempName,ConnectSDE(true),0);//首先创建一个sde链接文件 ? ? ??????? exportSDE(strAllPath + @"/sde.SDE.N120038NJS6",@"D:/dem/sss120038njs.img"); ??????? Response.Write("OK"); ??? } ? ? ??? /// <summary> ??? /// 设置SDE连接属性 ??? /// </summary> ??? /// <param name="ChkSdeLinkModle"></param> ??? /// <returns>IPropertySet</returns> ??? public static IPropertySet ConnectSDE(bool ChkSdeLinkModle) ??? { ??????? //定义一个属性 ??????? IPropertySet Propset = new PropertySetClass(); ??????? if (ChkSdeLinkModle == true) // 采用SDE连接 ??????? { ??????????? //设置数据库服务器名 ??????????? Propset.SetProperty("SERVER","GGG-927BCAE0082"); ??????????? //设置SDE的端口,这是安装时指定的,默认安装时"port:5151" ??????????? Propset.SetProperty("INSTANCE","port:5151"); ??????????? //SDE的用户名 ??????????? Propset.SetProperty("USER","sde"); ??????????? //密码 ??????????? Propset.SetProperty("PASSWORD","sde"); ??????????? //设置数据库的名字,只有SQL Server? Informix 数据库才需要设置 ??????????? Propset.SetProperty("DATABASE","sde"); ??????????? //SDE的版本,在这为默认版本 ??????????? Propset.SetProperty("VERSION","SDE.DEFAULT"); ??? ????} ??????? else // 直接连接 ??????? { ??????????? //设置数据库服务器名,如果是本机可以用"sde:sqlserver:.",直接连接会弹出选择数据库对话框,要求填入用户名密码 ??????????? Propset.SetProperty("INSTANCE","sde:sqlserver:xxsde"); ??????? } ? ??????? return Propset; ? } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |