zoukankan      html  css  js  c++  java
  • MapX直连Oracle——MapX5配合Oracle时,对中文表名支持不好

    隐藏行号 复制代码 MapX直连Oracle
    1. public void  LoadServerTableMap(string TableName)
    2. {
    3.     MapXLib.Layer lyr;
    4.     MapXLib.LayerInfo LayerInfo;
    5.     LayerInfo = new LayerInfoClass();
    6.     LayerInfo.Type = LayerInfoTypeConstants.miLayerInfoTypeServer;
    7.     LayerInfo.AddParameter("NAME", TableName);
    8.     LayerInfo.AddParameter("connectstring", "uid=map;pwd=abc;srvr=Map");
    9.     LayerInfo.AddParameter("query", "select * from " + TableName+";");
    10.     LayerInfo.AddParameter("cache", "off"); 
    11.     LayerInfo.AddParameter("MBRSearch", "on");
    12.     LayerInfo.AddParameter("toolkit", "ORAINET"); 
    13.     LayerInfo.AddParameter("AutoCreateDataset", 1);
    14.     LayerInfo.AddParameter("datasetname", TableName);
    15.     lyr = axMap.Layers.Add(LayerInfo, 1);
    16.     lyr = null;
    17.     LayerInfo = null;
    18. }

    上面这串代码,是我翻译的VB6的。MapX相当的可恶,VB6与C#上面差异好多。就拿LayerInfo这个类吧。在C#这个类名只是个接口,而实际的类名为:LayerInfoClass。这不是折腾人嘛。还有些函数在C#里面参数一定要写全了,而VB6里面参数可以不写全。等等等等。目前为止我很讨厌MapX。

    错误发觉篇

    开始我们买的地图由于是中文名命名的tab文件,所以使用EasyLoader上传时候同样的采用中文名字。这就给我造成好长时间的麻烦。

    private void button1_Click(object sender, EventArgs e)
    {
        LoadServerTableMap("二级道路");
    }

    开始用上面代码直连Oracle调用地图,它总是报错。且错误令人匪夷所思。

    image

    Oracle Error: OCI RC=-1, DBMS RC=4043, DBMS Msg=ORA-04043: 对象 map.二级 不存在

    表名只剩下一半了。开始以为Oracle对中文支持不够好。特意在SQL语句里面加了引号:

    LayerInfo.AddParameter("query", "select * from \"" + TableName+"\";");
    就是加引号还是报错。

    Oracle Error: OCI RC=-1, DBMS RC=1740, DBMS Msg=ORA-01740: 标识符中缺失双引号
    ORA-01740: 标识符中缺失双引号。

    这个错误把我弄得很郁闷。找了半天都不知道原因是什么。后来一次实验操作让我明白了。我开始以为是不是MapX在操作中文的时候没有取全字符即4个中文字符它以4个西文字符长度取,所以怎么取都取不全。有了猜测后,我做了实验:

    LoadServerTableMap("二级道路    ");

    在中文表名后面加了4个全角空格。终于可以通过SQL了。可惜的是,还是报错。

    DBMS Error, found Object column but no MapCatalog entry exists.

    不管怎样我算是明白了。这个鸡巴东西太歧视中文了。

    解决错误篇

    解决办法就是用西文字符的表面。我想到转换成汉语拼音。可是如果手动修改表名岂不累翻我?于是乎决定动小聪明。由于Oracle里的表都是通过EasyLoader上传上去的。因为上传之前的tab文件名为中文所以导致了上传后的表名也为中文。想象最简单的办法就是把中文的tab文件名改成汉语拼音的。

    到网上搜了搜软件,有专门批量转换文件名为拼音的。
    image
    这软件到也很好用。使用他修改了文件名。然后用Oracle的客户端管理界面把原来的表给删除了(那个JAVA的管理软件删除表可真它妈慢呀)。然后用 EasyLoader批量上传。传说中的空间数据库地图信息终于显示在了我的MapX空间上面。我那个泪流满面啊~~~~~~。

    image

    完结

  • 相关阅读:
    分布式文件系统 FastDFS
    Autoit里用多进程模拟多线程
    请不要做浮躁的人(新手必读!)
    如何用AU3调用自己用VC++写的dll函数
    DLL编写教程
    win32下的命令行集合 (最优秀的工具)
    autoit 《FAQ 大全》
    Windows XP 常用DOS命令
    rundll32 常用命令
    批处理的高级运用技巧
  • 原文地址:https://www.cnblogs.com/edzjx/p/1579867.html
Copyright © 2011-2022 走看看