using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OracleClient;
using System.Data;
namespace PublicService
{
public class OracleHelper
{
#region 构造函数
public OracleHelper(string OracleConnStr)
{
ConnStr = OracleConnStr;
}
public OracleHelper()
{
}
public OracleHelper(string Server, string Name, string UserName, string UserPwd)
{
//传入对应的 服务器名称 实例名 用户名 密码
ConnStr = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = " + Server +
")(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = " + Name +
"))); User ID=" + UserName + "; PassWord=" + UserPwd;
}
#endregion
#region 属性信息
private string ConnStr = null;
public string ConnString
{
set
{
ConnStr = value;
}
get
{
return ConnStr;
}
}
#endregion
#region 获得表名
///
/// 获得数据库表名
///
///
public DataTable GetTableName()
{
using (OracleConnection OracleConn = new OracleConnection(ConnStr))
{
try
{
OracleConn.Open();
DataTable dt = OracleConn.GetSchema("Tables", null);
OracleConn.Close();
OracleConn.Dispose();
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(OracleConn);
}
}
}
///
/// 获得数据库表名
///
///
public DataTable GetViewName()
{
using (OracleConnection OracleConn = new OracleConnection(ConnStr))
{
try
{
OracleConn.Open();
DataTable dt = OracleConn.GetSchema("Views", null);
OracleConn.Close();
OracleConn.Dispose();
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(OracleConn);
}
}
}
///
/// 获得数据库表名
///
///
public DataTable GetTableName_Old()
{
using (OracleConnection oleConn = new OracleConnection(ConnStr))
{
DataSet ds = new DataSet();
string SQLString = "select a.TABLE_NAME,b.COMMENTS from user_tables a,user_tab_comments b WHERE a.TABLE_NAME=b.TABLE_NAME order by TABLE_NAME ";
try
{
oleConn.Open();
OracleDataAdapter oleDa = new OracleDataAdapter(SQLString, oleConn);
oleDa.Fill(ds, "temp");
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(oleConn);
}
return ds.Tables[0];
}
}
#endregion
#region 测试连接
///
/// 测试连接
///
public void TestConn()
{
//测试连接
using (OracleConnection OracleConn = new OracleConnection(ConnStr))
{
using (OracleCommand cmd = new OracleCommand())
{
try
{
OracleConn.Open();
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(OracleConn);
}
}
}
}
#endregion
#region 执行SQL
///
/// 执行SQL语句,返回受影响的行数
///
/// SQL语句
public int ExcuteSql(string SQLString)
{
using (OracleConnection OracleConn = new OracleConnection(ConnStr))
{
using (OracleCommand cmd = new OracleCommand(SQLString, OracleConn))
{
try
{
OracleConn.Open();
int rows = cmd.ExecuteNonQuery();
OracleConn.Close();
return rows;
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(OracleConn);
}
}
}
}
#endregion
#region 执行SQL,返回对应的数据集
///
/// 执行SQL,返回对应的数据集
///
/// 执行的SQL语句
/// 内存中的表名
/// 返回对应的数据集
public DataSet ExcuteSqlGetDataSet(string SQLString, string TableName)
{
using (OracleConnection oleConn = new OracleConnection(ConnStr))
{
DataSet ds = new DataSet();
try
{
//string format = "select * from (select rownum executedatasetrownum,executedatasettable1.* from ({0}) executedatasettable1 where rownum <= {1} ) executedatasettable2 where executedatasettable2.executedatasetrownum > {2}";
//string commandText = string.Format(format, SQLString, 0, 0);
oleConn.Open();
OracleDataAdapter oleDa = new OracleDataAdapter(SQLString, oleConn);
oleDa.Fill(ds, TableName);
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(oleConn);
}
return ds;
}
}
#endregion
#region 执行SQL事务
///
/// 执行SQL事务
///
/// SQL数组
public void ExecuteSqlTran(string[] SQLStringArray)
{
using (OracleConnection conn = new OracleConnection(ConnStr))
{
conn.Open();
using (OracleTransaction trans = conn.BeginTransaction())
{
OracleCommand cmd = new OracleCommand();
cmd.Transaction = trans;
cmd.Connection = conn;
try
{
//执行SQL
for (int i = 0; i < SQLStringArray.Length; i++)
{
cmd.CommandText = SQLStringArray[i];
cmd.ExecuteNonQuery();
}
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw new Exception(ex.Message);
}
finally
{
CloseConn(conn);
cmd.Dispose();
trans.Dispose();
}
}
}
}
public void ExecuteSqlTran(List SQLStringArray)
{
using (OracleConnection conn = new OracleConnection(ConnStr))
{
conn.Open();
using (OracleTransaction trans = conn.BeginTransaction())
{
OracleCommand cmd = new OracleCommand();
cmd.Transaction = trans;
try
{
//执行SQL
for (int i = 0; i < SQLStringArray.Count; i++)
{
cmd.CommandText = SQLStringArray[i];
cmd.ExecuteNonQuery();
}
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw new Exception(ex.Message);
}
finally
{
CloseConn(conn);
cmd.Dispose();
trans.Dispose();
}
}
}
}
#endregion
#region 更新数据表
public void UpdateDataTable(DataTable dt, string SqlStr)
{
using (OracleConnection oracleConn = new OracleConnection(ConnStr))
{
oracleConn.Open();
try
{
OracleDataAdapter oleDa = new OracleDataAdapter(SqlStr, oracleConn);
OracleCommandBuilder builder = new OracleCommandBuilder();
oleDa.Update(dt);
}
catch (System.Data.OleDb.OleDbException ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(oracleConn);
}
}
}
public void UpdateDataTable(DataTable ParentTable, DataTable ChildTable, string[] SqlStr, string mainName)
{
using (OracleConnection oleConn = new OracleConnection(ConnStr))
{
DataSet oDs = new DataSet();
oleConn.Open();
try
{
//父表
OracleDataAdapter oleDa = new OracleDataAdapter(SqlStr[0], oleConn);
OracleCommandBuilder builder = new OracleCommandBuilder(oleDa);
//子表
OracleDataAdapter oleDa1 = new OracleDataAdapter(SqlStr[1], oleConn);
OracleCommandBuilder builder1 = new OracleCommandBuilder(oleDa);
oDs.Tables.Add(ParentTable);
oDs.Tables.Add(ChildTable);
oDs.Relations.Add(new DataRelation("ParentChild", oDs.Tables[0].Columns[mainName], oDs.Tables[1].Columns[mainName]));
oleDa.Update(oDs.Tables[0]);
oleDa1.Update(oDs.Tables[1]);
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(oleConn);
}
}
}
#endregion
#region 执行SQL,返回第一行第一列
///
/// 执行SQL语句,返回受影响的行数
///
/// SQL语句
public object ExcuteSqlBackData(string SQLString)
{
using (OracleConnection oleConn = new OracleConnection(ConnStr))
{
using (OracleCommand cmd = new OracleCommand())
{
try
{
cmd.Connection = GetConn(oleConn);
cmd.CommandText = SQLString;
object rows = cmd.ExecuteScalar();
CloseConn(oleConn);
return rows;
}
catch (System.Data.OracleClient.OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
CloseConn(oleConn);
}
}
}
}
#endregion
#region 打开数据库及关闭数据库
public OracleConnection GetConn(OracleConnection oleConn)
{
if (oleConn.State == ConnectionState.Closed)
{
oleConn.Open();
}
return oleConn;
}
public void CloseConn(OracleConnection oleConn)
{
if (oleConn.State == ConnectionState.Open)
{
oleConn.Close();
oleConn.Dispose();
}
}
#endregion
#region 修正表的类型
public void DBTable_GetSchemaFixDataType(DataTable dataTable, string tableName)
{
DataTable dataTable2 = ExcuteSqlGetDataSet("Select * from " + tableName + " where 1=2", "temp").Tables[0];
//DataTable dataTable2 = _DataBaseHelper.ExecuteDataSet("Select * from " + tableName + " where 1=2").Tables[0];
bool flag = false;
foreach (DataRow dataRow in dataTable.Rows)
{
dataRow["Column_DefaultValue"] = dataRow["Column_DefaultValue"].ToString().Replace(" ", "").Replace("\"", "");
dataRow["Column_IsNullable"] = dataRow["Column_IsNullable"].ToString().ToLower().Replace("no", "False").Replace("yes", "True").Replace("n", "False").Replace("y", "True").Replace("false", "False").Replace("true", "True");
dataRow["Column_IsKey"] = dataRow["Column_IsKey"].ToString().ToLower().Replace("no", "False").Replace("yes", "True").Replace("n", "False").Replace("y", "True").Replace("false", "False").Replace("true", "True");
if (string.IsNullOrEmpty(dataRow["Column_Comment"].ToString()))
{
dataRow["Column_Comment"] = dataRow["Column_Name"];
}
foreach (DataColumn dataColumn in dataTable2.Columns)
{
if (dataRow["Column_Name"].ToString().ToLower() == dataColumn.ColumnName.ToLower())
{
if (dataRow["Column_DataType"].ToString() != "System.Double")
{
dataRow["Column_DataType"] = dataColumn.DataType.ToString();
break;
}
break;
}
}
if (dataRow["Column_IsKey"].ToString() == "True")
{
flag = true;
}
}
if (!flag)
{
string text = string.Empty;
if (tableName.IndexOf("_") >= 0)
{
text = tableName.Substring(tableName.IndexOf("_") + 1);
}
else
{
text = tableName;
}
text += "_ID";
foreach (DataRow dataRow2 in dataTable.Rows)
{
if (dataRow2["Column_Name"].ToString() == text)
{
dataRow2["Column_IsKey"] = "True";
break;
}
}
}
dataTable.AcceptChanges();
}
#endregion
}
}