加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

使用Geoprocessor导出ArcSde中的数据,对COM 组件的调用返回了错

发布时间:2020-12-12 15:00:54 所属栏目:MsSql教程 来源:网络整理
导读:方法 exportSDE在VS中调试没有问题,发布到IIS后,则报错误:对COM 组件的调用返回了错误 HRESULT E_FAIL 。 google后发现解决问题的方法千篇一律,没一个管用的。 后来在http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=69628 处搜索到一问题,随试了

方法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;

?

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读