using System;
using System.Xml;
using System.Collections;
using System.Data.OracleClient;
using System.Data;
using System.Windows.Forms;
namespace LegendNet.Common.Oracle
{
/// <summary>
/// Connection 的摘要说明。
/// </summary>
public class OracleHelper
{
private string dataSource;
private string username;
private string password;
private string dialect;
public int myNowpage;
public int formSelect=-1;
#region 构造函数
/// <summary>
/// 主动给定配置信息
/// </summary>
public OracleHelper(string dataSource,string username,string password,string dialect)
{
this.dataSource=dataSource;
this.username=username;
this.password=password;
this.dialect=dialect;
}
/// <summary>
/// 从系统目录里自动获取LegendNetCommonOracle.xml文件
/// </summary>
public OracleHelper()
{
string configFilePath=System.AppDomain.CurrentDomain.BaseDirectory+"config/LegendNetCommonOracle.xml";
this.CheckConfig(configFilePath);
}
public OracleHelper(string configFilePath)
{
this.CheckConfig(configFilePath);
}
/// <summary>
/// 指定文件路径获取配置信息
/// </summary>
private void CheckConfig(string filePath)
{
try
{
XmlDocument _xd=new XmlDocument();
_xd.Load(filePath);
XmlElement root=_xd.DocumentElement;
XmlNodeList _xnl=root.GetElementsByTagName("db_cfg");
IEnumerator ienum = _xnl.GetEnumerator();
ienum.MoveNext();
ienum=((XmlNode)ienum.Current).ChildNodes.GetEnumerator();
while(ienum.MoveNext())
{
XmlNode title = (XmlNode) ienum.Current;
switch(title.Name)
{
case "data_source":
{
this.dataSource=title.InnerText;
break;
}
case "username":
{
this.username=title.InnerText;
break;
}
case "password":
{
this.password=title.InnerText;
break;
}
case "dialect":
{
this.dialect=title.InnerText;
break;
}
}
}
}
catch(Exception e)
{
throw new Exception("加载数据库配置文件出错,错误 "+e.Message);
}
}
#endregion
#region 基本属性
public string DataSource
{
get{return this.dataSource;}
set{this.dataSource=value;}
}
public string Username
{
get{return this.username;}
set{this.username=value;}
}
public string Password
{
get{return this.password;}
set{this.password=value;}
}
public string Dialect
{
get{return this.dialect;}
set{this.dialect=value;}
}
#endregion
/// <summary>
/// 返回系统配置的数据库连接,最好能把数据库底层屏蔽掉
/// 目前只有oracle所以目前只处理oracle
/// </summary>
public OracleConnection getDbConn()
{
try
{
OracleConnection oConn=new OracleConnection();
oConn.ConnectionString=this.toOracleString();
return oConn;
}
catch(System.Data.OracleClient.OracleException e)
{
throw new Exception("不能连接到数据库 错误代码"+e.Code+" 错误信息"+e.Message);
}
catch(Exception e)
{
throw new Exception("不能连接到数据库 "+e.Message);
}
}
/// <summary>
/// 返回自定义数据库连接
/// </summary>
public OracleConnection getMyDbConn(String url)
{
OracleConnection oConn=new OracleConnection();
oConn.ConnectionString=url;
return oConn;
}
/// <summary>
/// 返回系统配置信息
/// </summary>
public string toOracleString()
{
string url="";
if(dataSource==null||dataSource=="")
{
throw new Exception("没有指定数据源!");
}
if(username==null||username=="")
{
throw new Exception("没有用户名");
}
if(password==null||password=="")
{
throw new Exception("没有密码");
}
url="Data Source="+this.dataSource+";User Id="+this.username+";Password="+this.password;
// url="Data Source=song;User Id=kaka;Password=kaka";
return url;
}
public OracleCommand GetCommand(string Sql)
{
OracleConnection myConn1=this.getDbConn();
OracleCommand myCmd=new OracleCommand(Sql,myConn1);
try
{
myConn1.Open();
return myCmd;
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
//myConn1.Close();
//myConn1.Dispose();
}
}
//返回sql语句的结果集
public DataSet GetDataSet(string Sql,string TableName)
{
OracleConnection myConn=this.getDbConn();
OracleDataAdapter myDa=new OracleDataAdapter(Sql,myConn);
DataSet myDs=new DataSet();
try
{
myConn.Open();
myDs.Clear();
myDa.Fill(myDs,TableName);
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
myConn.Close();
myConn.Dispose();
myDa.Dispose();
}
return myDs;
}
public void DoSql(string Sql,string TableName)
{
OracleConnection myConn1=this.getDbConn();
OracleCommand myCmd=new OracleCommand(Sql,myConn1);
try
{
myConn1.Open();
myCmd.ExecuteNonQuery();
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
myConn1.Close();
myConn1.Dispose();
}
}
public void DoParameters(ArrayList pList)
{
OracleConnection myConn=new OracleConnection();
OracleCommand myCmd=new OracleCommand("aa",myConn);//aa为存储过程名
myCmd.CommandType=CommandType.StoredProcedure;
}
public int GetCount(string tableName,string myROLE_ID,string myPERMISSION_ID,string myAREA_ID)
{
int nCount = -1;
string Sql="select count(*) as tt ";
Sql+="from "+tableName;
Sql+=" where ROLE_ID='"+ myROLE_ID +"'and PERMISSION_ID='"+ myPERMISSION_ID +"' and AREA_ID='"+ myAREA_ID +"'";
OracleConnection myConn2=this.getDbConn();
OracleCommand myCmd=new OracleCommand(Sql,myConn2);
myConn2.Open();
OracleDataReader myReader=myCmd.ExecuteReader();
try
{
myReader.Read();
nCount=Convert.ToInt32(myReader["tt"]);
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
myReader.Close();
myConn2.Close();
myConn2.Dispose();
}
return nCount;
}
/// <summary>
/// 绑定数据源
/// </summary>
/// <param name="sql"></param>
/// <param name="tableName"></param>
/// <param name="dataGrid"></param>
/// <param name="needBindHead">是否需要绑定列头</param>
/// <param name="columnName"></param>
public DataSet BindDataGrid(string sql,string tableName,DataGrid dataGrid,bool needBindHead,string[] columnName)
{
if(dataGrid==null)
{
throw new Exception("DataGrid为空");
}
DataSet dataSet=this.GetDataSet(sql,tableName);
System.Data.DataTable dataTable =dataSet.Tables[0];
for(int i=0;i<columnName.Length;i++)
{
dataTable.Columns[i].ColumnName=columnName[i];
}
dataGrid.DataSource=dataTable;
DataGridTableStyle ts=new DataGridTableStyle();
ts.MappingName=tableName;
for(int i=0;i<columnName.Length;i++)
{
DataGridColumnStyle tbc=new DataGridTextBoxColumn();
tbc.HeaderText=columnName[i].ToString().Trim();
tbc.MappingName=columnName[i].ToString().Trim();
tbc.Width=dataGrid.Width/columnName.Length;
tbc.Alignment=System.Windows.Forms.HorizontalAlignment.Left;
ts.GridColumnStyles.Add(tbc);
if(this.formSelect==0)
ts.RowHeadersVisible=false;
}
dataGrid.TableStyles.Clear();
dataGrid.TableStyles.Add(ts);
dataGrid.Refresh();
return dataSet;
}
public DataSet GetDataSetByPage(string Sql,string TableName)
{
OracleConnection myConn=this.getDbConn();
OracleDataAdapter myDa=new OracleDataAdapter(Sql,myConn);
DataSet myDs=new DataSet();
try
{
myConn.Open();
myDs.Clear();
int pagesize=20;
int start=pagesize*(myNowpage-1);
myDa.Fill(myDs,start,pagesize,TableName);
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
myConn.Close();
myConn.Dispose();
myDa.Dispose();
}
return myDs;
}
public int GetPageCount(string Sql,string TableName)
{
int pageCount;
OracleConnection myConn=this.getDbConn();
OracleDataAdapter myDa=new OracleDataAdapter(Sql,myConn);
DataSet myDs=new DataSet();
try
{
myConn.Open();
myDs.Clear();
myDa.Fill(myDs,TableName);
int rowcount=myDs.Tables[0].Rows.Count;
int n=rowcount/20;
if(rowcount==20*n)
{
pageCount=n;
}
else
{
pageCount=n+1;
}
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
myConn.Close();
myConn.Dispose();
myDa.Dispose();
}
return pageCount;
}
public DataSet myBindDataGrid(string sql,string tableName,DataGrid dataGrid,bool needBindHead,string[] columnName)
{
if(dataGrid==null)
{
throw new Exception("DataGrid为空");
}
DataSet dataSet=this.GetDataSetByPage(sql,tableName);
System.Data.DataTable dataTable =dataSet.Tables[0];
for(int i=0;i<columnName.Length;i++)
{
dataTable.Columns[i].ColumnName=columnName[i];
}
dataGrid.DataSource=dataTable;
DataGridTableStyle ts=new DataGridTableStyle();
ts.MappingName=tableName;
for(int i=0;i<columnName.Length;i++)
{
DataGridColumnStyle tbc=new DataGridTextBoxColumn();
if(columnName[i].ToString().Trim()=="ID")
{
tbc.Width=-1;
ts.GridColumnStyles.Add(tbc);
}
else
{
tbc.MappingName=columnName[i].ToString().Trim();
tbc.Alignment=System.Windows.Forms.HorizontalAlignment.Left;
tbc.NullText="";
tbc.HeaderText=columnName[i].ToString().Trim();
if(this.formSelect==0)
tbc.Width=(dataGrid.Width/columnName.Length)+20;
else if(this.formSelect==1)
tbc.Width=(dataGrid.Width/columnName.Length)+80;
ts.GridColumnStyles.Add(tbc);
ts.RowHeadersVisible=false;
}
}
dataGrid.TableStyles.Clear();
dataGrid.TableStyles.Add(ts);
dataGrid.Refresh();
return dataSet;
}
}
}