我用reflector 反编了一个程序,swicth反编成了goto之类的,有错误,哪位高手帮我看看,怎么修改。 for (int i1 = 0; i1 < sqlParams.Length; i1++)
            {
                string s = sqlParams[i1].DataType;
                if (s == System.String.Empty)
                    goto label_1;
                switch (s)
                {
                    case "Int16\uFFFD":
                    case "Int32\uFFFD":
                    case "Int64\uFFFD":
                        oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Int32);
                        break;                    case "Double\uFFFD":
                    case "Decimal\uFFFD":
                    case "Single\uFFFD":
                        oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Double);
                        break;                    case "DateTime\uFFFD":
                    case "TimeSpan\uFFFD":
                        oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.DateTime);
                        break;                    case "Byte[]\uFFFD":
                        oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Blob);
                        break;                    case "String\uFFFD":
                        oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.VarChar, 10000);
                        break;                    default:
                        oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, sqlParams[i1].Value);
                        goto label_2;
                    label_1:
                        object obj1 = sqlParams[i1].Value;
                        if (obj1.GetType() == typeof(System.DateTime))
                        {
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.DateTime);
                        }
                        else if (obj1.GetType() == typeof(string))
                        {
                            int i2 = obj1.ToString().Length;
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.VarChar, i2 == 0 ? 1 : i2);
                        }
                        else if (obj1.GetType() == typeof(int))
                        {
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Int32);
                        }
                        else if (obj1.GetType().Name.Equals("DataTable\uFFFD"))
                        {
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Cursor);
                        }
                        else if (obj1.GetType().Name.Equals("OracleType.Clob\uFFFD"))
                        {
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Clob);
                        }
                        else
                        {
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, obj1);
                        }
                        break;
                }
            label_2:
                oracleParameter.Direction = sqlParams[i1].Direction;
                _Cmd.Parameters.Add(oracleParameter);
            }
        }
另外 原来也有个final的错误,代码如下
 ~OracleWrapper()
        {
            try
            {
                Close();
            }
            catch 
            {
            }
            finally
            {
                base.Finalize();
            }
        }我直接修改成了。
 ~OracleWrapper()
        {
            
                Close();
        
        }
这样应该没问题吧,或者指导一下改成什么样比较合适,是否要保留try catch.谢谢。

解决方案 »

  1.   

    这样行不
    for (int i1 = 0; i1 < sqlParams.Length; i1++)
                {
                    string s = sqlParams[i1].DataType;
                    if (s == System.String.Empty)
                       {
                        object obj1 = sqlParams[i1].Value;
                            if (obj1.GetType() == typeof(System.DateTime))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.DateTime);
                            }
                            else if (obj1.GetType() == typeof(string))
                            {
                                int i2 = obj1.ToString().Length;
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.VarChar, i2 == 0 ? 1 : i2);
                            }
                            else if (obj1.GetType() == typeof(int))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Int32);
                            }
                            else if (obj1.GetType().Name.Equals("DataTable\uFFFD"))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Cursor);
                            }
                            else if (obj1.GetType().Name.Equals("OracleType.Clob\uFFFD"))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Clob);
                            }
                            else
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, obj1);
                            }
                        }
                    else
                   {     
                    switch (s)
                    {
                        case "Int16\uFFFD":
                        case "Int32\uFFFD":
                        case "Int64\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Int32);
                            break;                    case "Double\uFFFD":
                        case "Decimal\uFFFD":
                        case "Single\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Double);
                            break;                    case "DateTime\uFFFD":
                        case "TimeSpan\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.DateTime);
                            break;                    case "Byte[]\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Blob);
                            break;                    case "String\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.VarChar, 10000);
                            break;                    default:
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, sqlParams[i1].Value);
                           oracleParameter.Direction = sqlParams[i1].Direction;
                     _Cmd.Parameters.Add(oracleParameter);
                            
                            break;
                    }
                  }
                }
            }
      

  2.   


    上面看掉了
    for (int i1 = 0; i1 < sqlParams.Length; i1++)
                {
                    string s = sqlParams[i1].DataType;
                    if (s == System.String.Empty)
                       {
                        object obj1 = sqlParams[i1].Value;
                            if (obj1.GetType() == typeof(System.DateTime))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.DateTime);
                            }
                            else if (obj1.GetType() == typeof(string))
                            {
                                int i2 = obj1.ToString().Length;
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.VarChar, i2 == 0 ? 1 : i2);
                            }
                            else if (obj1.GetType() == typeof(int))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Int32);
                            }
                            else if (obj1.GetType().Name.Equals("DataTable\uFFFD"))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Cursor);
                            }
                            else if (obj1.GetType().Name.Equals("OracleType.Clob\uFFFD"))
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Clob);
                            }
                            else
                            {
                                oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, obj1);
                            }
                                            oracleParameter.Direction = sqlParams[i1].Direction;
                    _Cmd.Parameters.Add(oracleParameter);                    }
                    else
                   {     
                    switch (s)
                    {
                        case "Int16\uFFFD":
                        case "Int32\uFFFD":
                        case "Int64\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Int32);
                            break;                    case "Double\uFFFD":
                        case "Decimal\uFFFD":
                        case "Single\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Double);
                            break;                    case "DateTime\uFFFD":
                        case "TimeSpan\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.DateTime);
                            break;                    case "Byte[]\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.Blob);
                            break;                    case "String\uFFFD":
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, System.Data.OracleClient.OracleType.VarChar, 10000);
                            break;                    default:
                            oracleParameter = new System.Data.OracleClient.OracleParameter(sqlParams[i1].Name, sqlParams[i1].Value);
                           oracleParameter.Direction = sqlParams[i1].Direction;
                     _Cmd.Parameters.Add(oracleParameter);
                            
                            break;
                    }
                  }
                }
            }
      

  3.   


    第一段 if 为什么还要加上 lable2 的代码呢?不太明白。
      

  4.   

    就是这个 oracleParameter.Direction = sqlParams[i1].Direction;
                    _Cmd.Parameters.Add(oracleParameter);