2025-03-28 09:49:56 +08:00

461 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Text;
//using System.Data.OracleClient;
using System.Data;
using Oracle.ManagedDataAccess.Client;
namespace StockDeduction.AppCode
{
public class OracleHelper
{
#region
public OracleHelper(string OracleConnStr)
{
ConnStr = OracleConnStr;
}
public OracleHelper()
{
}
public OracleHelper(string Server, string Port, string Name, string UserName, string UserPwd)
{
//传入对应的 服务器名称 实例名 用户名 密码
ConnStr = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = " + Server +
")(PORT = " + Port + "))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = " + Name +
"))); User ID=" + UserName + "; PassWord=" + UserPwd + ";Connection Timeout = 5;";
}
#endregion
#region
private string ConnStr = null;
public string ConnString
{
set
{
ConnStr = value;
}
get
{
return ConnStr;
}
}
#endregion
#region
/// <summary>
/// 获得数据库表名
/// </summary>
/// <returns></returns>
public DataTable GetTableName()
{
using (OracleConnection OracleConn = new OracleConnection(ConnStr))
{
try
{
OracleConn.Open();
DataTable dt = OracleConn.GetSchema("Tables", null);
OracleConn.Close();
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
/// <summary>
/// 获得数据库表名
/// </summary>
/// <returns></returns>
public DataTable GetViewName()
{
using (OracleConnection OracleConn = new OracleConnection(ConnStr))
{
try
{
OracleConn.Open();
DataTable dt = OracleConn.GetSchema("Views", null);
OracleConn.Close();
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
/// <summary>
/// 获得数据库表名
/// </summary>
/// <returns></returns>
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 (OracleException ex)
{
throw new Exception(ex.Message);
}
return ds.Tables[0];
}
}
#endregion
#region
/// <summary>
/// 测试连接
/// </summary>
public void TestConn()
{
//测试连接
using (OracleConnection OracleConn = new OracleConnection(ConnStr))
{
using (OracleCommand cmd = new OracleCommand())
{
try
{
OracleConn.Open();
}
catch (OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
OracleConn.Close();
}
}
}
}
#endregion
#region SQL
/// <summary>
/// 执行SQL语句返回受影响的行数
/// </summary>
/// <param name="SQLString">SQL语句</param>
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 (OracleException ex)
{
throw new Exception(ex.Message);
}
}
}
#endregion
#region SQL
/// <summary>
/// 执行SQL返回对应的数据集
/// </summary>
/// <param name="SQLString">执行的SQL语句</param>
/// <param name="TableName">内存中的表名</param>
/// <returns>返回对应的数据集</returns>
public DataSet ExcuteSqlGetDataSet(string SQLString, string TableName = "Template")
{
using (OracleConnection oleConn = new OracleConnection(ConnStr))
{
DataSet ds = new DataSet();
try
{
oleConn.Open();
OracleDataAdapter oleDa = new OracleDataAdapter(SQLString, oleConn);
oleDa.Fill(ds, TableName);
}
catch (OracleException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
#endregion
#region SQL事务
public void ExecuteSqlTran(string SQLString)
{
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
cmd.CommandText = SQLString;
cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw new Exception(ex.Message);
}
finally
{
cmd.Dispose();
trans.Dispose();
}
}
}
}
/// <summary>
/// 执行SQL事务
/// </summary>
/// <param name="SQLStringArray">SQL数组</param>
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
{
cmd.Dispose();
trans.Dispose();
}
}
}
}
public void ExecuteSqlTran(List<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.Count; i++)
{
cmd.CommandText = SQLStringArray[i].ToString();
cmd.ExecuteNonQuery();
}
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw new Exception(ex.Message);
}
finally
{
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
{
oracleConn.Close();
}
}
}
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 (OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
oleConn.Close();
}
}
}
#endregion
#region SQL,
/// <summary>
/// 执行SQL语句返回受影响的行数
/// </summary>
/// <param name="SQLString">SQL语句</param>
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 (OracleException ex)
{
throw new Exception(ex.Message);
}
}
}
}
#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();
}
}
#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
}
}