c# mysql oledb_C# oledb 数据库操作类

public classoperateDB

{private static stringconStr;public staticOleDbConnection cnn;

OleDbDataAdapter da;

OleDbCommandBuilder cb;

OleDbCommand cmd;//构造函数

#region initialize

publicoperateDB()

{//

//TODO: 在此处添加构造函数逻辑// cnn=newOleDbConnection();

da=newOleDbDataAdapter();//不用OleDbCommand对象更新到数据库时,必须有下面一行

cb=newOleDbCommandBuilder(da);

cmd=newOleDbCommand();

}#endregion initialize

//连接字符串

#region get&setConnectionString

///

///获取连接字符串///

public stringMyConStr

{get {returnconStr;}set {conStr =value;}

}#endregion get&setConnectionString

//获得表的名称

#region acquireTableNames

///

///获取数据库中的表名集合///

///

publicDataTable tablesCollection()

{

DataTable tbl=newDataTable();try{

cnn.ConnectionString=conStr;

cnn.Open();

tbl=cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});

}catch(Exception ce)

{

Console.WriteLine("产生错误:\n{0}",ce.Message);

}finally{

cnn.Close();

}returntbl;

}#endregion acquireTableNames

//填充数据

#region fillTable

///

///填充dataTable的查询///

/// 数据表(必须输入数据库中存在的名称,也可以是视图)

/// SQL语句

/// 记录条数

public int select(DataTable tblName,stringsqlStr)

{int i=0;//try//{//

tblName.Clear();

da.Dispose();if (cnn.ConnectionString=="")

cnn.ConnectionString=conStr;if (cnn.State!=ConnectionState.Open)

cnn.Open();//OleDbCommand cmd=new OleDbCommand("select * from "+tblName.TableName+" where "+sqlStr,cnn);

cmd.Connection=cnn;

cmd.CommandType=CommandType.Text;

cmd.CommandText="select * from"+tblName.TableName+"where"+sqlStr;

da.SelectCommand=cmd;

i=da.Fill(tblName);//

//

//}//catch(Exception ce)//{//Console.WriteLine("产生错误:\n{0}",ce.Message);//}//finally//{//this.da.Dispose();

cnn.Close();//}

returni;

}#endregion fillTable

//插入记录

#region insert(use CommandBuilder)

///

///插入记录(用OleDbCommandBuilder)///

/// 数据表

/// 与表中字段对应的新行

/// 影响的行数

public intinsert(DataTable tblName,DataRow newRow)

{

cnn.Open();int i=0;//

//try//{//如何判断OleDbDataAdapter是否已经Dispose//下面如果不生成新的OleDbDataAdapter、OleDbCommandBuilder、OleDbCommand,//而用原来的全局da,cb,cmd,则在一次操作中只能更新一张表

OleDbDataAdapter daIn=newOleDbDataAdapter();

OleDbCommandBuilder cbIn=newOleDbCommandBuilder(daIn);

OleDbCommand cmdIn=new OleDbCommand("select * from"+tblName.TableName,cnn);

daIn.SelectCommand=cmdIn;//foreach (DataTable dt in da.TableMappings)//{//if (dt.TableName!=tblName.TableName)//dt.Clear();//}

tblName.Rows.Add(newRow);

i=daIn.Update(tblName);//

//}//catch(Exception ce)//{//Console.WriteLine("产生错误:\n{0}",ce.Message);//}//finally//{//cnn.Close();//}//cnn.Close();

returni;

}#endregion insert(use CommandBuilder)

//插入记录

#region insert(use InsideTransaction,DataTable[])

public stringinsert(DataTable[] tbls,DataRow[] newRows)

{int[] num=new int[tbls.Length];int sum=0;bool judge=false;string str="";if (tbls.Length==newRows.Length)

{

cnn.Open();

OleDbTransaction tran=cnn.BeginTransaction();for (int i=0;i

{//this.select(tbls[i],"1=1",tran);

da.InsertCommand=insertCmd(tbls[i],"操作编号");

tbls[i].Rows.Add(newRows[i]);

da.InsertCommand.Transaction=tran;try{

num[i]=da.Update(tbls[i]);

sum+=num[i];

}catch{

sum=-1;

}if (num[i]==0)

judge=true;

}if(judge)

{

tran.Rollback();

str="更新失败";

sum=0;

}else{

tran.Commit();

str="更新成功";

}

}

cnn.Close();return str+",影响了"+sum.ToString()+"条记录";

}#endregion insert(use InsideTransaction,DataTable[])

//插入记录

#region insert(use OutsideTransaction)

///

///填充DataTable(用于事务处理)///

/// 表

/// SQL语句

/// Transaction对象

/// 行数

public int select(DataTable tblName,stringsqlStr,OleDbTransaction trs)

{int i=0;//try//{//

tblName.Clear();

da.Dispose();if (cnn.ConnectionString=="")

cnn.ConnectionString=conStr;if (cnn.State!=ConnectionState.Open)

cnn.Open();//OleDbCommand cmd=new OleDbCommand("select * from "+tblName.TableName+" where "+sqlStr,cnn);

cmd.Connection=cnn;

cmd.CommandType=CommandType.Text;

cmd.CommandText="select * from"+tblName.TableName+"where"+sqlStr;

da.SelectCommand=cmd;

cmd.Transaction=trs;

i=da.Fill(tblName);returni;

}///

///插入记录(用OleDbDataAdapter.Update方法及OleDbTransaction)///

/// 数据表

/// 新行

/// 事务对象

///

public intinsert(DataTable tblName,DataRow newRow,OleDbTransaction trs)

{

da.InsertCommand=insertCmd(tblName,"noo");int num=0;try{

tblName.Rows.Add(newRow);

da.InsertCommand.Transaction=trs;

num=da.Update(tblName);

}catch{

}returnnum;

}#endregion insert(use OutsideTransaction)

//构造插入的Command

#region insertCommand

///

///构造insertCommand///

/// 数据表

/// identity列的名称

///

private static OleDbCommand insertCmd(DataTable dtl,stringidentityCol)

{

OleDbCommand inCmd=newOleDbCommand();

inCmd.Connection=cnn;string sqlStr="";string strValue="";

sqlStr= "INSERT" + dtl.TableName.ToString() + "(";

strValue= ") Values (";for (int i=0;i

{//对于IDENTITY列无需赋值

if (dtl.Columns[i].ToString() !=identityCol)

{

sqlStr+= "[" + dtl.Columns[i].ToString() + "],";

strValue+="?,";

OleDbParameter myPara= newOleDbParameter();

myPara.ParameterName= "@" +dtl.Columns[i].ToString();

myPara.OleDbType=GetOleDbType(dtl.Columns[i].DataType.ToString());//myPara.Direction = ParameterDirection.Input;

myPara.SourceColumn =dtl.Columns[i].ToString();//myPara.SourceVersion = DataRowVersion.Current;

inCmd.Parameters.Add(myPara);

}

}

sqlStr=sqlStr.Substring(0,sqlStr.Length-2);

strValue=strValue.Substring(0,strValue.Length-1);

sqlStr+= strValue + ")";

inCmd.CommandText=sqlStr;returninCmd;

}#endregion insertCommand

//修改

#region update

///

///修改记录///

/// 数据表

/// SQL语句

/// 影响的行数

public int update(DataTable tblName,stringstrUp)

{

cnn.Close();returni;

}#endregion update

//删除

#region del(use CommandBuilder)

///

///删除记录///

/// 数据表

/// SQL语句

/// 影响的行数

public int delete(DataTable tblName,string strDel) //strDel是删除条件

{int rows=0;//用OleDbDataAdapter.Update方法自动更新必须在where中存在主键或唯一值//try//{//

cnn.Open();

rows=tblName.Rows.Count;for (int i=0;i< tblName.Rows.Count;i++)

{

tblName.Rows[i].Delete();

}//注意,如在da.Update前面用了下面的AcceptChanges方法,因为记录被删除--更新到数据库失败//tblName.AcceptChanges();

da.Update(tblName);//

//}//catch(Exception ce)//{//Console.WriteLine("产生错误:\n{0}",ce.Message);//}//finally//{

cnn.Close();//}

///

//用OleDbCommand直接更新//try//{//string str="delete from "+tblName.TableName+" where "+strDel;//cnn.Open();//OleDbCommand cmdD=new OleDbCommand(str,cnn);//cmdD.CommandType=CommandType.Text;//rows=cmdD.ExecuteNonQuery();//}//

//catch(Exception ce)//{//Console.WriteLine("产生错误:\n{0}",ce.Message);//}//finally//{//cnn.Close();//}

returnrows;

}#endregion del(use CommandBuilder)

//构造删除的Command

#region delCommand(create OleDbDataAdapter.deleteCommand)

public intdelete(DataTable tblName)

{int rows=0;

da.DeleteCommand=delCmd(tblName);for (int i=0;i< tblName.Rows.Count;i++)

{

tblName.Rows[i].Delete();

}

rows=da.Update(tblName);returnrows;

}private staticOleDbCommand delCmd(DataTable dtl)

{

OleDbCommand delCmd=newOleDbCommand();

delCmd.Connection=cnn;string sqlStr="";

sqlStr= "delete from" + dtl.TableName.ToString() + "where";for (int i=0;i

{

sqlStr+= "([" + dtl.Columns[i].ToString() + "] = ? OR ? IS NULL AND ["+dtl.Columns[i].ToString()+"] IS NULL) AND";

OleDbParameter myPara= newOleDbParameter();

myPara.ParameterName= "or1_" +dtl.Columns[i].ToString();

myPara.OleDbType=GetOleDbType(dtl.Columns[i].DataType.ToString());

myPara.Direction=ParameterDirection.Input;

myPara.SourceColumn=dtl.Columns[i].ToString();

myPara.SourceVersion=DataRowVersion.Original;

delCmd.Parameters.Add(myPara);int j=delCmd.Parameters.Count;bool b=dtl.Columns[i].AllowDBNull;if(b)

{

OleDbParameter myPara1= newOleDbParameter();

myPara1.ParameterName= "or2_" +dtl.Columns[i].ToString();

myPara1.OleDbType=GetOleDbType(dtl.Columns[i].DataType.ToString());

myPara1.Direction=ParameterDirection.Input;

myPara1.SourceColumn=dtl.Columns[i].ToString();

myPara1.SourceVersion=DataRowVersion.Original;

delCmd.Parameters.Add(myPara1);

j=delCmd.Parameters.Count;

}

}

sqlStr=sqlStr.Substring(0,sqlStr.Length-3);

delCmd.CommandText=sqlStr;returndelCmd;

}#endregion delCommand(create OleDbDataAdapter.deleteCommand)

#region amendDataBase

public void addColumn(DataTable tblName,string strUp) //修改表的结构,更新到数据库

{

cnn.Open();//OleDbCommand cmdS=new OleDbCommand("select * from "+tblName.TableName,cnn);//da.SelectCommand=cmdS;//OleDbCommandBuilder cb=new OleDbCommandBuilder(da);//DataColumn colItem = new DataColumn(strUp,Type.GetType("System.String"));//

//tblName.Columns.Add(colItem);//为什么上面的方法不行,只能直接用SQL语句吗?

da.Fill(tblName);

da.Update(tblName);

}#endregion amendDataBase

//调用存储过程

#region execProc(return dataTable)

///

///执行存储过程///

/// 存储过程名字

/// 参数的值

/// 参数名字

/// 参数的类型

///

public DataTable ExecProc(string procName,string[] ParaValue,string[] ParaName,string[] ParaType)

{

OleDbCommand cmdp=newOleDbCommand();

cmdp.Connection=cnn;

cmdp.CommandType=CommandType.StoredProcedure;

cmdp.CommandText=procName;for (int i=0;i

{

OleDbParameter pt=newOleDbParameter();

ParaName[i]="@"+ParaName[i];//参数名字//pt.ParameterName=ParaName[i];

pt.SourceColumn=ParaName[i];

pt.OleDbType=GetOleDbType(ParaType[i]);

pt.Value=ParaValue[i];

cmdp.Parameters.Add(pt);

}

DataTable dtl=newDataTable();

cnn.Open();

da.SelectCommand=cmdp;

da.Fill(dtl);

cnn.Close();returndtl;

}///

///设置OleDbParameter对象的DbType(把字符串变为相应的OleDbType类型)///

/// 传入参数的字符串

///

private static OleDbType GetOleDbType(stringtype)

{//try//{//return (OleDbType)Enum.Parse(typeof(OleDbType), type, true);//}//catch//{//return OleDbType.Varchar;//}

switch(type)

{case "date":returnOleDbType.DBDate;break;case "num":returnOleDbType.Integer;break;default:returnOleDbType.VarChar;

}

}#endregion execProc(return dataTable)}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值