一个C#项目里有多个数据库怎么处理

一个C#项目里有多个数据库怎么处理,第1张

C#中同一个解决方案有多个项目时,可以用以下代码相互运用:

Form2 f2=new Form2()

private void button1_Click(object sender, EventArgs e)

{

if (f2.Visible)

f2.Visible = false

else

f2.Visible = true

}

实例化另外一个窗体

点击这个按钮,就出现,再点一次,就消失。

相信你这样一系统,肯定用了三层架构的模式,这样的话就好解决了,在数据访问层专一个连接数据库的有参方法。在调用该方法时传递不同数据库名即可,当然,每次在数据库访问层 *** 作后一定要断掉数据连接,对一些实例清空回收,这很重要。

public DatabaseClass(String databaseName )

{

strDbConnection="server=.uid=sapwd=sadatabase="+ databaseName

}

给你一点我以前的代码,或许对你有用。

------------------------------------------------------------------

using System

using System.Data

using System.Data.SqlClient

using System.Collections

using System.ComponentModel

namespace Common

{

public class DatabaseClass

{

static String strDbConnection="" // 保存数据库连接字符串

static bool isCon // 数据库连接标志

static SqlConnection con//数据库连接对象

static SqlCommand cmd //SQL命令对象

private SqlTransaction _sqlTransaction //事务对象

private bool _isStartTransaction //事务开启标志

//无参构造

public DatabaseClass()

{

//strDbConnection="server=.uid=sapwd=sadatabase=emporiumDB"

strDbConnection="server=.uid=sapwd=sadatabase=BankDB"

}

//有参构造(从外部传入连接串)

public DatabaseClass(String ConnectionString)

{

if (ConnectionString != "")

{

strDbConnection = ConnectionString

con=null

isCon =false

}

}

//打开数据库连接,成功返回true

private bool ConnectDb()

{

//若数据库不处于连接状态,则执行连库 *** 作

if (!isCon)

{

try

{

//如果没有连接,就实例化一个新的连接

if (con == null)

{

con = new SqlConnection(strDbConnection)

con.Open()

}

//有SQL命令有无例化对象,没就就实例化一新的。

if (cmd == null)

{

cmd = new SqlCommand()

}

isCon = true

cmd.Connection = con

}

catch(Exception e)

{

throw e

}

}

return true

}

//执行单向SQL语句,如插入、删除、修改,成功返回true

public bool Execute(string sSql)

{

if (!ConnectDb())

{

throw(new ApplicationException("没有建立数据库连接"))

}

cmd.CommandType = System.Data.CommandType.Text

cmd.CommandText = sSql

try

{

cmd.ExecuteNonQuery()

return true

}

catch(SqlException e)

{

throw new Exception("执行SQL语句时出现问题"+e.Message )

}

catch(Exception e)

{

throw e

}

finally

{

Dispose()

}

}

//执行返回int型单值的SQL语句

public int ExecuteScalar(string sql)

{

int count=0

if (!ConnectDb())

{

throw new Exception("没有建立数据库连接")

}

cmd.CommandType = System.Data.CommandType.Text

cmd.CommandText = sql

try

{

count=(int)cmd.ExecuteScalar()

return count

}

catch(SqlException e)

{

throw new Exception("执行SQL语句时出现问题"+e.Message )

}

catch(Exception e)

{

throw e

}

finally

{

Dispose()

}

}

//执行返回字符串类型单值的SQL语句

public string ExecuteString(string sql)

{

string str=""

if (!ConnectDb())

{

throw new Exception("没有建立数据库连接")

}

cmd.CommandType = System.Data.CommandType.Text

cmd.CommandText = sql

try

{

str=(string)cmd.ExecuteScalar()

return str

}

catch(SqlException e)

{

throw new Exception("执行SQL语句时出现问题"+e.Message )

}

catch(Exception e)

{

throw e

}

finally

{

Dispose()

}

}

//把tableName表中的数据填充到数据集dataSet中,成功返回true

public bool Select(DataSet dataSet, string tableName, string queryString)

{

//若连接数据库失败则产生异常

if (!ConnectDb())

{

throw new Exception("数据库没有连接。")

}

try

{

//执行SQL语句,并将执行结果填充到DataSet的表中

cmd.CommandType = System.Data.CommandType.Text

cmd.CommandText = queryString

SqlDataAdapter adapter = new SqlDataAdapter()

adapter.SelectCommand = cmd

adapter.Fill(dataSet,tableName)

return true

}

catch(SqlException e)

{

throw new Exception("数据库错误。"+e.Message )

}

catch(Exception ex)

{

throw ex

}

finally

{

Dispose()

}

}

// 查询数据库,返回查询结果表,SQL查询语句,成功返回查询结构表,失败返回null

public DataTable Select(String l_sQuery,String l_sTableName )

{

String sql = l_sQuery

String sTableName = l_sTableName

//若连接数据库失败则返回空

if (!ConnectDb())

{

throw new Exception ("数据库连接失败")

}

DataSet cDataSet = new DataSet()

try

{

//执行SQL语句,并将执行结果充到DataSet的表中

cmd.CommandType = System.Data.CommandType.Text

cmd.CommandText = sql

SqlDataAdapter adapter = new SqlDataAdapter()

adapter.SelectCommand = cmd

adapter.Fill(cDataSet,sTableName)

}

catch(SqlException e)

{

throw e

}

finally

{

Dispose()

}

DataTable tempTable = cDataSet.Tables[sTableName]

cDataSet.Tables.Remove(sTableName)//从集合中移除该DataTable

return tempTable

}

//开启事务

public void StartTransation()

{

//若连接数据库失败抛出错误

if (!ConnectDb())

{

throw(new ApplicationException("没有建立数据库连接。"))

}

this._isStartTransaction = true

this._sqlTransaction = con.BeginTransaction(IsolationLevel.ReadCommitted)

cmd.Transaction = _sqlTransaction

}

// 当前待处理事务提交,失败全部回滚, 成功提交返回true

public bool Commit()

{

//如果没有开启事务处理功能,不做任何 *** 作,直接返回成功

if (!_isStartTransaction)

{

return true

}

try

{

_sqlTransaction.Commit()

}

catch(SqlException e)

{

_sqlTransaction.Rollback()

throw e

}

return true

}

//调用三个参数存储过程,返回一个表

public DataTable RunProcedure(string procName,string pName1,string pValue1,

string pName2,string pValue2,string pName3,string pValue3)

{

//若连接数据库失败抛出错误

if (!ConnectDb())

{

throw(new ApplicationException("没有建立数据库连接。"))

}

try

{

cmd=new SqlCommand (procName,con)

cmd.CommandType =CommandType.StoredProcedure

//创建输入参数

SqlParameter sq1=new SqlParameter(pName1,SqlDbType.Int)

sq1.Direction =ParameterDirection.Input

sq1.Value =pValue1

cmd.Parameters .Add (sq1)

SqlParameter sq2=new SqlParameter(pName2,SqlDbType.VarChar)

sq1.Direction =ParameterDirection.Input

sq1.Value =pValue2

cmd.Parameters .Add (sq2)

SqlParameter sq3=new SqlParameter(pName3,SqlDbType.VarChar)

sq1.Direction =ParameterDirection.Input

sq1.Value =pValue3

cmd.Parameters .Add (sq3)

// //创建输出参数

// SqlParameter spid=new SqlParameter ("@spid",SqlDbType.VarChar,20)

// spid.Direction =ParameterDirection.Output

// sqlCmd.Parameters .Add (spid)//

// //创建接收返回值的参数

// SqlParameter sReturn=new SqlParameter ("@RETURN_VALUE",SqlDbType.Int)

// sReturn.Direction =ParameterDirection.ReturnValue

// sqlCmd.Parameters .Add (sReturn)

SqlDataAdapter da=new SqlDataAdapter ()

da.SelectCommand=cmd

DataSet ds1=new DataSet ()

da.Fill (ds1)

return ds1.Tables[0]

}

catch(Exception e)

{

throw e

}

finally

{

Dispose()

}

}

//调用储过程(存储过程名,参数名,参数值,参数类型)

public DataTable RunProcedure(string procName,string pName,string pValue,SqlDbType type)

{

//若连接数据库失败抛出错误

if (!ConnectDb())

{

throw(new ApplicationException("没有建立数据库连接。"))

}

try

{

cmd=new SqlCommand (procName,con)

cmd.CommandType =CommandType.StoredProcedure

//创建输入参数

SqlParameter sq1=new SqlParameter(pName,type)

sq1.Direction =ParameterDirection.Input

sq1.Value =pValue

cmd.Parameters .Add (sq1)

SqlDataAdapter da=new SqlDataAdapter ()

da.SelectCommand=cmd

DataSet ds1=new DataSet ()

da.Fill (ds1)

return ds1.Tables[0]

}

catch(Exception e)

{

throw e

}

finally

{

Dispose()

}

}

// 关闭数据库,释放数据库资源,成功返回true

public bool CloseDb()

{

//释放资源

Dispose()

return true

}

//自定义释放资源,断掉连接。

public virtual void Dispose(bool disposing)

{

if (! disposing)

return

//如果数据库处于连接状态,则进行断库及释放资源的 *** 作

if (isCon)

{

if (con.State != ConnectionState.Closed )

{

con.Dispose()

con.Close()

cmd = null

con = null

_sqlTransaction=null

isCon = false

}

}

}

// 除去对象资源.

public void Dispose()

{

//调用带参数的释放资源方法

Dispose(true)

GC.SuppressFinalize(true)

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9903594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存