有条这样的sql语句: 
insert into building(objectid,geometry) 
VALUES('1',SDO_GEOMETRY(3008,NULL,Null,SDO_ELEM_INFO_ARRAY(1,1007,1,1,1006,6,1,1003,1,16,1003,1,31,1003,1,46,1003,1,61,1003,1,76,1003,1), 
SDO_ORDINATE_ARRAY(6480357.54645854,1846550.25297484,384.709626833255,6480311.29982045,1846572.95319146,376.815402517268,6480311.2998204))) 
我要把6480357.54645854,1846550.25297484,384.709626833255,6480311.29982045,1846572.95319146,376.815402517268,6480311.2998204作为参数动态绑定起来。 
string strQuery="into building(objectid,geometry) 
VALUES('1',SDO_GEOMETRY(3008,NULL,Null,SDO_ELEM_INFO_ARRAY(1,1007,1,1,1006,6,1,1003,1,16,1003,1,31,1003,1,46,1003,1,61,1003,1,76,1003,1), 
SDO_ORDINATE_ARRAY(:geom)))"; 
OraclCommad commad = new OracleCommand(strQuery,_oraConnection); 
OracleParameter parameter = new OracleParameter(":geom",OracleDbType.Array); 
parameter.Value = doublearrya;(一个doulbe类型的数组) 
command.Parameter.Add(parameter); 
我执行的时候出现“绑定参数无效的错误” 
我觉的问题的在:geom的类型不对 不是OracleDbType.Array. varchar也不是的,因为我绑定的也不是字符型。高手帮我看看怎么解决?

解决方案 »

  1.   

    使用数组变量赋float值的问题,可以搜一下。
      

  2.   

    这个类型应该是数组,你看它的创建语句:CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;
    应该是你JAVA里类型没选对。
      

  3.   

      问题在:“new OracleCommand(strQuery,_oraConnection); 
    OracleParameter parameter = new OracleParameter(":geom",OracleDbType.Array); ”
    因为“...SDO_ORDINATE_ARRAY(:geom)))"; ”的VALUES内有整型又有字符型,转换参数不一致但又强行给了string strQuery,
    “new OracleParameter(":geom",OracleDbType.Array); ”事例化时就不对了,
    执行的时候就会报“绑定参数无效的错误”。
    参考下列表达就应该没问题了:
    adapter.SelectCommand.Parameters.Add("pEName", OracleType.VarChar, 80).Value = "Smith";
       adapter.SelectCommand.Parameters.Add("pEmpNo", OracleType.Int32).Value = 7369;
       adapter.Fill(dataSet);
    如再不行就GOOGLE一下DAO的基础步骤,了解再改一下。