1、/// <summary>

/// 获取当前目标表结构

/// </summary>

/// <param name="tableName">目标表</param>

/// <returns></returns>

public static DataTable GetOracleTableSchema(string tableName)

{             BS.EAP.DBAccess.IDataBase oDB = BS.EAP.DBAccess.DBFactory.GetDBInstance();

string sql = string.Format(@"             select t.COLUMN_NAME as name, t.DATA_LENGTH as ColLength,t.DATA_TYPE as Typeid, t.DATA_SCALE as Scale,decode(nvl(tp.column_name, ''),'',0,1) as isPrimary,                    '{0}' as tableName, '{0}' as viewName, 0 as viewField,                    (case t.NULLABLE when 'Y' then 1 else 0 end) as isNullable, tp.column_name             from USER_TAB_COLS t             left join (select col.table_name, col.column_name                  from user_constraints con,  user_cons_columns col                  where con.constraint_name = col.constraint_name and con.constraint_type='P'                  ) tp on tp.table_name = t.TABLE_NAME and tp.column_name = t.column_name             where  t.HIDDEN_COLUMN ='NO' and t.TABLE_NAME = '{0}'", tableName.ToUpper());

return oDB.GetDataTable(sql);

}

2、/// <summary>
        /// 生成批量插入Sql语句
        /// </summary>
        /// <param name="DestinationTableName">目标表</param>
        /// <param name="table">数据源</param>
        /// <param name="cmd">操作命令</param>
        /// <param name="DicInitData">初始数据</param>
        /// <returns></returns>
        public static string GenerateInserSql(string DestinationTableName, DataTable table, string strDsid)
        {
            BS.EAP.DBAccess.IDataBase oDB = DBFactory.GetDBInstance();
            DataTable dt = new DataTable();
            string column_name = string.Empty;
            string param = string.Empty;
            //查询表机构字段
            dt = oDB.GetDataTable(@"select column_name EnKey from 
                                        user_tab_columns   where  lower(table_name)=   '" + DestinationTableName.ToLower() + "' order by COLUMN_ID");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                column_name += dt.Rows[i][0].ToString() + ",";
                param += ":" + dt.Rows[i][0].ToString() + ",";
            }
            column_name = column_name.Substring(0, column_name.Length - 1);
            param = param.Substring(0, param.Length - 1);
            return string.Format("insert into " + DestinationTableName + "(" + column_name + ") values(" + param + ")");
        }

3、/// <summary>
        /// 构造参数
        /// </summary>
        /// <param name="DestDataTable"></param>
        /// <param name="table"></param>
        /// <param name="cmd"></param>
        public static void GenerateParameter(DataTable DestDataTable, DataTable table, OracleCommand cmd, string Dsid, string TableName, DataTable dbwell)
        {
            string strTypID = string.Empty;
            string strColumName = string.Empty;
            string IsRep = string.Empty;
            int colCount = table.Columns.Count;
            for (int i = 0; i < colCount; i++)
            {
                    strColumName = table.Columns[i].ColumnName;
                    OracleParameter parameter = new OracleParameter();
                    parameter.ParameterName = strColumName;
                    parameter.Direction = ParameterDirection.Input;
                    int iScale = 0;
                    strTypID = GetColumnType(strColumName, DestDataTable, out iScale);
                    DbType oDbType = GetDataFieldType(strTypID, iScale);
                    parameter.DbType = oDbType;
                     parameter.Value = GetObjectArray(table, strColumName, oDbType, dbwell);
                    cmd.Parameters.Add(parameter);
            }
        }

4、GetColumnType方法

/// <summary>

/// 获取字段类型         /// </summary>

/// <param name="columnName">字段名称</param>

/// <param name="dt">数据表</param>

/// <returns></returns>

public static string GetColumnType(string columnName, DataTable dt, out int iScale)

{

string strType = string.Empty;

iScale = 0;

for (int iRow = 0; iRow < dt.Rows.Count; iRow++)

{

string strColName = dt.Rows[iRow]["Name"].ToString();

if (strColName.ToUpper() == columnName.ToUpper())

{

strType = dt.Rows[iRow]["TypeID"].ToString();

if (dt.Rows[iRow]["SCALE"].ToString() == "" || dt.Rows[iRow]["SCALE"].ToString() == "0")

iScale = 0;

else

iScale = Convert.ToInt32(dt.Rows[iRow]["SCALE"].ToString());

break;

}

}

return strType;

}

5、// <summary>
        /// 获取字段类型
        /// </summary>
        /// <param name="strType">字段类型</param>
        /// <param name="iScale">小数位数</param>
        /// <returns></returns>
        public static DbType GetDataFieldType(string strType, int iScale)
        {
            DbType oDbType = DbType.String;
            switch (strType.ToUpper())
            {
                case "VARCHAR2":
                    oDbType = DbType.String;
                    break;
                case "DATE":
                    oDbType = DbType.DateTime;
                    break;
                case "NVARCHAR2":
                    oDbType = DbType.String;
                    break;
                case "NUMBER":
                    if (iScale == 0)
                        oDbType = DbType.Int32;
                    else
                        oDbType = DbType.Decimal;
                    break;
                case "FLOAT":
                    oDbType = DbType.Decimal;
                    break;
                case "LONG":
                    oDbType = DbType.Decimal;
                    break;
                case "BINARY_FLOAT":
                    oDbType = DbType.Decimal;
                    break;
                case "BINARY_DOUBLE":
                    oDbType = DbType.Decimal;
                    break;
                default:
                    break;
            }
            return oDbType;
        }

6、/// <summary>
        ///  构造值数组,供赋值使用
        /// </summary>
        /// <param name="dt">数据源表</param>
        /// <param name="colname">列名</param>
        /// <returns></returns>
        public static object[] GetObjectArray(DataTable dt, string colname, DbType oDbType, DataTable dbwell)
        {
            object[] objArray = new object[dt.Rows.Count];
            int iCol = 0;
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                if (dt.Columns[i].ColumnName == colname)
                {
                    iCol = i;
                    break;
                }
            }
            for (int j = 0; j < dt.Rows.Count; j++)
            {
                    if (string.IsNullOrEmpty(dt.Rows[j][iCol].ToString()))
                        objArray[j] = DBNull.Value;
                    else
                        objArray[j] = GetObjValue(dt.Rows[j][iCol], oDbType);
            }
            return objArray;
        }

.net 调用Oracle.Data.Access 组件提供的用于批量操作的方法—获取数据库表结构方法和跟参数赋值方法的更多相关文章

  1. .net 调用Oracle.Data.Access 组件提供的用于批量操作的方法

    1.添加引用 using Oracle.DataAccess.Client; using System.Configuration; 2.代码 增加方法 //DestinationTableName ...

  2. Windows 的 Oracle Data Access Components (ODAC)

     下载 x64bit https://www.oracle.com/technetwork/cn/database/windows/downloads/index.html 适用于 Windows 的 ...

  3. MySQL,SQLSERVER,ORACLE获取数据库表名及字段名

    1.MySQL 获取表名: 用“show tables”命令.在程序中也可以采用该命令获取,在返回的RowSet中的“Tables_in_db”读出来.其中“db”是指你的数据库的名称,比如说Tabl ...

  4. ORACLE 中写入txt文本与从Txt文件中读入数据 修改表结构

    --创建一个表 DROP TABLE TEST CASCADE CONSTRAINTS ; CREATE TABLE TEST(A VARCHAR(30),B VARCHAR(30)); --查看具体 ...

  5. oracle数据库自动生成数据库表结构文档(亲测有效)

    import java.awt.Color; import java.io.FileOutputStream; import java.sql.Connection; import java.sql. ...

  6. 使用 Oracle Data Access Components连接oracel

    使用微软自带的oracle连接类,在framework4.0中被标识为弃用,强行用它开发了Winform程序,发布放到XP上提示: Error System.Data.OracleClient req ...

  7. (转)oracle使用expdp、impdp和exp、imp导入导出表及表结构

    使用expdp.impdp和exp.imp时应该注重的事项: 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 2.expdp和impdp是服务端的工具程序,他们只能在 ...

  8. Oracle数据库表结构导出

    1. 在PL/SQL中找到"工具--导出用户对象"菜单.点击运行.

  9. oracle 使用sql获取数据库表,表的字段

    --第一种方法: 查询dba_tab_columns select COLUMN_NAME,DATA_TYPE,DATA_LENGTH  from   dba_tab_columns where  t ...

随机推荐

  1. 强大的微软Microsoft Translator翻译接口

    一.前言 当我们需要对日文.韩文等语言转换中文字符的时候,就用到了微软提供的翻译接口. 二.实现流程 1.首先注册一个账号 https://datamarket.azure.com/account 2 ...

  2. MySql不支持主外键

    创建表不支持主外键,能够添加外键成功,但是无法外键约束.查资料发现MySql的默认ENGINE 为MyISAM  ,不支持外键,需要修改为 INNODB 修改前: Create Table CREAT ...

  3. Qt之信号连接,你Out了吗?

    在遇到多信号问题的时候,你是否经常会连接多个槽函数呢?如果你的答案是绝对的,那么你已经Out很久了.多信号连接多个槽,实现不同的槽就在潜意识的加大程序的开销!那么为什么不去链接同一个槽呢?     今 ...

  4. 一个Hadoop难以查找的错误

    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starting namenodes on [Master1 ...

  5. Visual Studio express

    之前一直没用过Visual Studio的express版本.在最近一段时间,使用VS2010和2012的破解版都有点问题.vs2010突然不能使用,需要重新安装,家里和单位两台电脑都如此.家里一台电 ...

  6. Java并发编程--理解ThreadLocal

    另一篇博文:Hibernet中的ThreadLocal使用 http://www.cnblogs.com/gnivor/p/4440776.html 本文参考:http://blog.csdn.net ...

  7. JavaWeb学习笔记--filter开发

    介绍自定义的Filter类必须实现Filter接口,并且实现Filter接口定义的init() doFilter() destory()方法.其中init为初始化,destory为销毁 doFilte ...

  8. secureCRT命令大全

    常用命令:一.ls 只列出文件名-a:列出所有文件,包含隐藏文件.(ll -a)-l:列表形式,包含文件的绝大部分属性.(ll)-r:递归显示.(ll -r)--help:此命令的帮助.(ll --h ...

  9. 二叉树的Morris遍历

    二叉树的遍历,除了上篇文章中的传统递归和使用的栈结构的非递归方式,还有如下这种Morris遍历方式,该算法的构思非常巧妙:利用前驱空闲的rightChild指针指向当前节点,形成一个环.时间复杂度和前 ...

  10. Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案

    刚到一家公司,做原始的工作---接口,程序就我一人,没环境,没架构,更没旧项目可以利用,一切从0开始,经理以为我是老鸟,来就布置任务,要一周拿出结果.其实有现成架构的话写个接口还不是分分钟钟的事,关键 ...