zoukankan      html  css  js  c++  java
  • C#访问Oracle或SqlServer数据库遍历添加参数

    访问数据库层:

     public void GetBaseInfo(string strB_ID, DataSet myData)
            {
                OracleCommand cmd = dbOperation.OracleGetProcedureParameter("PK_INTELLECT", "P_GetBaseInfo", new object[] { strB_ID });
                cmd.CommandType = CommandType.StoredProcedure;
                myData = dbOperation.OracleGetProcedureData(cmd, myData, "temp");
            }

    SqlServer写法

    public static SqlCommand SqlServerGetProcedureParameter(string DbConnectString, String ProcedureName, params object[] parameters)
            {
                String sql = string.Empty;
    
    
                SqlCommand command = new SqlCommand();
                SqlCommand retCommand = new SqlCommand();
    
                ProcedureName = ProcedureName.ToUpper();
    
                sql = "select * from sys.procedures where name = '" + ProcedureName + "'";
                command = new SqlCommand(sql, new SqlConnection(DbConnectString));
                //command = new SqlCommand(sql, new SqlConnection(dbOperation.ConnectionString));
                command.CommandType = CommandType.Text;
                command.Connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (!reader.Read())    //未找到些名称的存储过程
                {
                    reader.Close();
                    command.Connection.Close();
                    throw new Exception("未发现名称为“" + ProcedureName + "”的存储过程!");
                }
                else                //找到此存储过程后,检察是否存在参数
                {
                    reader.Close();
                    retCommand = new SqlCommand(ProcedureName, new SqlConnection(DbConnectString));
                    retCommand.CommandType = CommandType.StoredProcedure;
                    //select* from syscolumns where ID in  (SELECT id FROM sysobjects as a WHERE OBJECTPROPERTY(id, N'IsProcedure') = 1 and id = object_id(N'[dbo].[apluphratedetailsel_sp]'))
                    sql = "SELECT PARAMETER_NAME,DATA_TYPE,ISNULL(CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION),NUMERIC_SCALE, PARAMETER_MODE FROM INFORMATION_SCHEMA.PARAMETERS  WHERE SPECIFIC_SCHEMA = 'dbo' AND SPECIFIC_NAME = '" + ProcedureName + "'";
                    //sql = "select * from ALL_ARGUMENTS where OBJECT_NAME = '" + ProcedureName + "' and OWNER = USER and PACKAGE_NAME = '" + PackageName + "' order by SEQUENCE";
                    command.CommandText = sql;
                    reader = command.ExecuteReader();
                    int i = 0;
                    while (reader.Read())
                    {
                        //OracleParameter para = new OracleParameter();
                        //para.ParameterName = reader["ARGUMENT_NAME"].ToString();
                        SqlParameter para = null;
                        String paramName = reader["PARAMETER_NAME"].ToString();
                        string a = reader["DATA_TYPE"].ToString();
                        switch (reader["DATA_TYPE"].ToString().ToUpper())
                        {
                            case "INT":
                                //para = new OracleParameter(paramName, OracleDbType.Int32);
                                para = new SqlParameter(paramName, SqlDbType.Decimal);  //myj,2009-3-16,edit
                                //para.OracleDbType = OracleDbType.Int32;
                                para.Value = parameters[i];
                                break;
                            case "VARCHAR":
                                para = new SqlParameter(paramName, SqlDbType.VarChar);
                                //para.OracleDbType = OracleDbType.Varchar2;
                                para.Value = parameters[i];
                                String sValue = para.Value.ToString();
                                if (sValue == String.Empty)
                                {
                                    para.Size = 4000;
                                }
                                else
                                {
                                    para.Size = sValue.Length;
                                }
                                break;
                            case "DATE":
                                para = new SqlParameter(paramName, SqlDbType.Date);
                                //para.OracleDbType = OracleDbType.Date;
                                para.Value = parameters[i];
                                break;
                                //case "CLOB":
                                //    if (string.IsNullOrEmpty(parameters[i].ToString()))
                                //    {
                                //        para = new SqlParameter(paramName, SqlDbType.Varchar2);
                                //    }
                                //    else
                                //    {
                                //        para = new SqlParameter(paramName, SqlDbType.Clob);
                                //    }
                                //    //para.OracleDbType = OracleDbType.Clob;
                                //    para.Value = parameters[i];
                                //    break;
                                //case "REF CURSOR":
                                //    para = new SqlParameter(paramName, SqlDbType.RefCursor);
                                //    //para.OracleDbType = OracleDbType.RefCursor;
                                //    break;
                        }
                        string b = reader["PARAMETER_MODE"].ToString();
                        switch (reader["PARAMETER_MODE"].ToString())
                        {
                            case "IN":
                                para.Direction = ParameterDirection.Input;
                                break;
                            case "OUT":
                                para.Direction = ParameterDirection.Output;
                                break;
                            case "IN/OUT":
                                para.Direction = ParameterDirection.InputOutput;
                                break;
                        }
                        i++;
                        retCommand.Parameters.Add(para);
                    }
                    reader.Close();
                    SqlServerCloseConnection(command);
                    return retCommand;
                }
            }

    oracle写法

    自定义dbOperation.OracleGetProcedureParameter方法

    /// <summary>
            /// 根据传入的“包名称”、“存储过程名称”、“参数变量值”,生成 OracleCommand 对象并放置在 dbOperation.oracleAdapter.SelectCommand 中。
            /// </summary>
            /// <param name="PackageName">包名称</param>
            /// <param name="ProcedureName">存储过程名称</param>
            /// <param name="parameters">按定义顺序填充的参数值数组</param>
            /// <returns>操作是否成功</returns>
            public static OracleCommand OracleGetProcedureParameter(String PackageName,String ProcedureName,params object[] parameters)
            {
                String sql=string.Empty;
                OracleCommand command=new OracleCommand();
                OracleCommand retCommand=new OracleCommand();
    
                PackageName = PackageName.ToUpper();
                ProcedureName = ProcedureName.ToUpper();
    
                sql = "select * from ALL_PROCEDURES where OBJECT_NAME = '" + PackageName + "' and OWNER=USER and  PROCEDURE_NAME = '" + ProcedureName + "'";
                command = new OracleCommand(sql,new OracleConnection(dbOperation.ConnectionString));
                command.CommandType = CommandType.Text;
                command.Connection.Open();
                OracleDataReader reader = command.ExecuteReader();
                if (!reader.Read())    //未找到些名称的存储过程
                {
                    reader.Close();
                    command.Connection.Close();                
                    throw new OracleObjectNotFoundException("未发现名称为“" + PackageName + "." + ProcedureName + "”的存储过程!");
                }
                else                //找到此存储过程后,检察是否存在参数
                {
                    reader.Close();
                    retCommand = new OracleCommand(PackageName + "." +ProcedureName,new OracleConnection(dbOperation.ConnectionString));
                    retCommand.CommandType = CommandType.StoredProcedure;
                    
                    sql = "select * from ALL_ARGUMENTS where OBJECT_NAME = '" + ProcedureName + "' and OWNER = USER and PACKAGE_NAME = '" + PackageName + "' order by SEQUENCE";
                    command.CommandText = sql;
                    reader = command.ExecuteReader();            
                    int i = 0;
                    while (reader.Read())
                    {
                        //OracleParameter para = new OracleParameter();
                        //para.ParameterName = reader["ARGUMENT_NAME"].ToString();
                        OracleParameter para = null;
                        String paramName = reader["ARGUMENT_NAME"].ToString();
    
                        switch (reader["DATA_TYPE"].ToString())
                        {
                            case "NUMBER":
                                //para = new OracleParameter(paramName, OracleDbType.Int32);
                                para = new OracleParameter(paramName, OracleDbType.Decimal);  //myj,2009-3-16,edit
                                //para.OracleDbType = OracleDbType.Int32;
                                para.Value = parameters[i];
                                break;
                            case "VARCHAR2":
                                para = new OracleParameter(paramName, OracleDbType.Varchar2);
                                //para.OracleDbType = OracleDbType.Varchar2;
                                para.Value = parameters[i];
                                String sValue = para.Value.ToString();
                                if (sValue == String.Empty)
                                {
                                    para.Size = 4000;
                                }
                                else
                                {
                                    para.Size = sValue.Length;
                                }
                                break;
                            case "DATE":
                                para = new OracleParameter(paramName, OracleDbType.Date);
                                //para.OracleDbType = OracleDbType.Date;
                                para.Value = parameters[i];
                                break;
                            case "CLOB":
                                if (string.IsNullOrEmpty(parameters[i].ToString()))
                                {
                                    para = new OracleParameter(paramName, OracleDbType.Varchar2);
                                }
                                else
                                {
                                    para = new OracleParameter(paramName, OracleDbType.Clob);
                                }
                                //para.OracleDbType = OracleDbType.Clob;
                                para.Value = parameters[i];
                                break;
                            case "REF CURSOR":
                                para = new OracleParameter(paramName, OracleDbType.RefCursor);
                                //para.OracleDbType = OracleDbType.RefCursor;
                                break;
                        }
                        switch (reader["IN_OUT"].ToString())
                        {
                            case "IN":
                                para.Direction = ParameterDirection.Input;
                                break;
                            case "OUT":
                                para.Direction = ParameterDirection.Output;
                                break;
                            case "IN/OUT":
                                para.Direction = ParameterDirection.InputOutput;
                                break;
                        }
                        i ++;
                        retCommand.Parameters.Add(para);
                    }
                    reader.Close();
    
                    dbOperation.OracleCloseConnection(command);
    
                    return retCommand;
                }
            }

    自定义dbOperation.OracleCloseConnection方法

    public static void OracleCloseConnection(OracleCommand cmd)
            {
                if (cmd.Connection != null)
                {
                    if (cmd.Connection.State != ConnectionState.Closed)
                    {
                        cmd.Connection.Close();
                    }
                    cmd.Connection.Dispose();
                    cmd.Connection = null;
                }
            }

    自定义dbOperation.OracleGetProcedureData方法:

     /// <summary>
            /// 根据传入的 Command,执行填充数据集的方法,返回 DataSet
            /// </summary>
            /// <param name="cmd">配置好的 Command 对象</param>
            /// <returns>返回填充好的数据集</returns>
            public static DataSet OracleGetProcedureData(OracleCommand cmd, DataSet retData, String tableName)
            {
                if (cmd.Connection == null || cmd.Connection.State != ConnectionState.Open)
                {
                    cmd.Connection = new OracleConnection(dbOperation.ConnectionString);
                    cmd.Connection.Open();
                }
    
                OracleDataAdapter oracleAdapter = new OracleDataAdapter(String.Empty,dbOperation.ConnectionString);
                oracleAdapter.SelectCommand = cmd;
    
                try
                {
                    if (retData.Tables.Count >0)
                        retData.Tables[tableName].Rows.Clear();
                }
                catch
                {
                }
    
                try
                {
                    oracleAdapter.Fill(retData,tableName);
                }
                catch (OracleException ex)
                {
                    throw new Exception(ex.Message);                
                }
                finally
                {
                    dbOperation.OracleCloseConnection(cmd);
                }
                return retData;
            }

    自定义dbOperation.OracleGetFunctionParameter方法:

    /// <summary>
            /// 根据转入的 functionName 及 参数值数组生成 OracleCommand 对象并存入 oracleAdapter 对象的 SelectCommand 中。
            /// </summary>
            /// <param name="functionName">要调用的函数名称</param>
            /// <param name="parameters">参数数组</param>
            /// <returns>操作是否成功</returns>
            public static OracleCommand OracleGetFunctionParameter(String functionName,params object[] parameters)
            {
                String sql;
                OracleCommand command,retCommand;
                
                functionName = functionName.ToUpper();
                sql = "select * from ALL_OBJECTS where OBJECT_NAME = '" + functionName + "' and OWNER = USER and OBJECT_TYPE = 'FUNCTION' and STATUS = 'VALID'";
                command = new OracleCommand(sql,new OracleConnection(dbOperation.ConnectionString));
                command.CommandType = CommandType.Text;
                command.Connection.Open();
                OracleDataReader reader = command.ExecuteReader();
                if (!reader.Read())    //未找到此名称的函数
                {
                    reader.Close();
                    command.Connection.Close();                
                    throw new OracleObjectNotFoundException("未发现名称为“" + functionName + "”的函数!");
                }
                else                //找到此存储过程后,检察是否存在参数
                {
                    reader.Close();
                    retCommand = new OracleCommand(functionName,new OracleConnection(dbOperation.ConnectionString));
                    retCommand.CommandType = CommandType.StoredProcedure;                
    
                    sql = "select * from ALL_ARGUMENTS where OBJECT_NAME = '" + functionName + "' and OWNER = USER order by SEQUENCE";
                    command.CommandText = sql;
                    command.CommandType = CommandType.Text;                
                    reader = command.ExecuteReader();
                    int i = 0;
                    while (reader.Read())
                    {                
                        OracleParameter para = new OracleParameter();
    
                        if (reader["ARGUMENT_NAME"] == System.DBNull.Value)
                        {
                            para.Direction = ParameterDirection.ReturnValue;
                            para.Size = (reader["DATA_LENGTH"] == System.DBNull.Value)? 1000:Convert.ToInt32(reader["DATA_LENGTH"]);                        
                        }
                        else
                        {
                            para.ParameterName = reader["ARGUMENT_NAME"].ToString();
                            //para.Direction = (reader["IN_OUT"].ToString() == "IN")? ParameterDirection.Input:ParameterDirection.Output;  //myj屏蔽 2008-4-26
                            //myj add 2008-4-26
                            switch (reader["IN_OUT"].ToString())
                            {
                                case "IN":
                                    para.Direction = ParameterDirection.Input;
                                    break;
                                case "OUT":
                                    para.Direction = ParameterDirection.Output;
                                    break;
                                case "IN/OUT":
                                    para.Direction = ParameterDirection.InputOutput;
                                    break;
                            }
                            //myj add 2008-4-26
    
                            switch (reader["DATA_TYPE"].ToString())
                            {
                                case "NUMBER":
                                    para.OracleDbType = OracleDbType.Double;
                                    para.Value = parameters[i];
                                    break;
                                case "VARCHAR2":
                                    para.OracleDbType = OracleDbType.Varchar2;
                                    para.Value = parameters[i];
                                    String sValue = Convert.ToString(para.Value);
                                    if (sValue == String.Empty)
                                    {
                                        para.Size = 3000;
                                    }
                                    else
                                    {
                                        para.Size = sValue.Length;
                                    }
                                    break;
                                case "REF CURSOR":
                                    para.OracleDbType = OracleDbType.RefCursor;
                                    break;
                            }
                        }
                        i ++;
                        retCommand.Parameters.Add(para);
                    }
                    reader.Close();
                    
                    dbOperation.OracleCloseConnection(command);
                    
                    return retCommand;
                }
            }
  • 相关阅读:
    Spring Boot 2.1.10 学习笔记(2)
    Spring Boot 2.1.10 学习笔记(1)
    Win10 下载与激活 MSDN
    Java JDK 1.8 下载及其版本说明 8u202(最后一个免费版)
    shell函数开发意见优化系统脚本
    php大文件下载支持断点续传
    xunsearch使用笔记
    微信使用的curl方法
    php执行sql语句打印结果
    二维数组排序:array_orderby(php官网评论)
  • 原文地址:https://www.cnblogs.com/wangjp-1233/p/13281151.html
Copyright © 2011-2022 走看看