.net 调用Oracle.Data.Access 组件提供的用于批量操作的方法—获取数据库表结构方法和跟参数赋值方法
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 组件提供的用于批量操作的方法—获取数据库表结构方法和跟参数赋值方法的更多相关文章
- .net 调用Oracle.Data.Access 组件提供的用于批量操作的方法
1.添加引用 using Oracle.DataAccess.Client; using System.Configuration; 2.代码 增加方法 //DestinationTableName ...
- Windows 的 Oracle Data Access Components (ODAC)
下载 x64bit https://www.oracle.com/technetwork/cn/database/windows/downloads/index.html 适用于 Windows 的 ...
- MySQL,SQLSERVER,ORACLE获取数据库表名及字段名
1.MySQL 获取表名: 用“show tables”命令.在程序中也可以采用该命令获取,在返回的RowSet中的“Tables_in_db”读出来.其中“db”是指你的数据库的名称,比如说Tabl ...
- ORACLE 中写入txt文本与从Txt文件中读入数据 修改表结构
--创建一个表 DROP TABLE TEST CASCADE CONSTRAINTS ; CREATE TABLE TEST(A VARCHAR(30),B VARCHAR(30)); --查看具体 ...
- oracle数据库自动生成数据库表结构文档(亲测有效)
import java.awt.Color; import java.io.FileOutputStream; import java.sql.Connection; import java.sql. ...
- 使用 Oracle Data Access Components连接oracel
使用微软自带的oracle连接类,在framework4.0中被标识为弃用,强行用它开发了Winform程序,发布放到XP上提示: Error System.Data.OracleClient req ...
- (转)oracle使用expdp、impdp和exp、imp导入导出表及表结构
使用expdp.impdp和exp.imp时应该注重的事项: 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 2.expdp和impdp是服务端的工具程序,他们只能在 ...
- Oracle数据库表结构导出
1. 在PL/SQL中找到"工具--导出用户对象"菜单.点击运行.
- oracle 使用sql获取数据库表,表的字段
--第一种方法: 查询dba_tab_columns select COLUMN_NAME,DATA_TYPE,DATA_LENGTH from dba_tab_columns where t ...
随机推荐
- 32位PLSQL_Developer连接oracle11g_64位
1. 请将你下载的instantclient-basic-win32-10.2.0.5 文件解压.然后复制到你的数据库安装的文件夹下的producti文件夹下,我的是: E:\app\Administ ...
- Mac os 上可执行jar包转app方法
此操作可分如下几步: 1:生成jarbao: jar cf myName.jar *.class 2:生成打包所需配置文件:build.xml: <project name="MyPr ...
- div有最小高度且自适应高度
DIV最小高度且自适应高度 在IE6中,如果子容器的高度超过父容器的时候,父容器会被子容器撑开,所以我们可以直接设置一个height的高度值即可.但是在IE7和firefox就不行了,它不会自动撑 ...
- DX笔记之五------游戏画面绘图之绘制位图
本系列文章由zhmxy555编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7335103 共四步 步骤一:加载位图 步骤二:建立与 ...
- HDU4545+计算日期
/* 计算过了D天后的日期 之前D天的日期 */ #include<stdio.h> int judge_year( int year ){ if( (year%4==0&& ...
- MySQL 使用索引扫描来做排序
MySQL有两种方式可以生成有序的结果:通过排序操作:或者按照索引顺序扫描:如果EXPLAIN 出来的结果的type列的值为“index”,则说明MySQL使用了索引扫描来做排序(不要和Extra列的 ...
- ECSTORE 货币格式
世界上许多国家都有不同的货币 格局和数字 格局 特例 .针对特定的当地化环境正确地 格局化和显示货币是当地化的一个主要部分,ecstore 可以同过后台的设置,来更改货币的格式,具体方式为 后台-&g ...
- 分享QQ第三方登陆SDK
主要是考虑到QQ的PHP SDK写的真是太烂了,纯属是普及API知识,而不是到手就可以部署的类库..反正自己都写了一个了,就拿出来分享下.. 什么也不多说,直接上代码. Qq_sdk.php < ...
- android手机获取手机号
最近做到一个项目,需要获取手机号.项目中使用的手机卡为电信卡,那么就以此为例吧. 网上不符合需求的方法 Google了一下,网上的做法如下: //获取手机号码 TelephonyManager tm ...
- HTML&CSS基础学习笔记1.6-html的文本操作标签
文本也许是HTML里最常见的元素了,所以我们有必要对HTML的文本操作标签做下认识. 1. <em>,<i>内的文字呈现为倾斜效果: 2. <strong>,< ...