求助:如何在一个项目中使用多个SQL数据库?

作者&投稿:菜堂 (若有异议请与网页底部的电邮联系)
SQL Server如何在一个数据库的多个表或多个数据库的多个表中查找内容~

同库操作select a.列名1,b.列名2,a.列名3 from 表名1 as ajoin 表名2 as bon a.关联字段=b.关联字段
不同库操作select a.列名1,b.列名2,a.列名3 from 库名1.dbo.表名1 as ajoin 库名2.dbo.表名2 as bon a.关联字段=b.关联字段
2张表以上的多表连接:先两张连接再与第三张连接,依次下去,如select a.列名1,b.列名2,a.列名3 from 表名1 as ajoin 表名2 as bon a.关联字段=b.关联字段join 表名3 as con a.关联字段=c.关联字段

`

主要就是在where后后使用and逻辑运算符

如:

select * from [表名] where 学校='清华大学' and 住址='北京' and 性别='男'
以上为查询,清华大学,住址为北京的所有男性的信息



还可以使用用模糊查询.
如:


select * from [表名] where 学校 like '%清华大学%' and 住址 like '%北京%' and 性别='男'

以上为查询学校有清华两字,住址中有北京两字的所有男性的信息


要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。



·

相信你这样一系统,肯定用了三层架构的模式,这样的话就好解决了,在数据访问层专一个连接数据库的有参方法。在调用该方法时传递不同数据库名即可,当然,每次在数据库访问层操作后一定要断掉数据连接,对一些实例清空回收,这很重要。
public DatabaseClass(String databaseName )
{
strDbConnection="server=.;uid=sa;pwd=sa;database="+ 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=sa;pwd=sa;database=emporiumDB";
strDbConnection="server=.;uid=sa;pwd=sa;database=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);
}

}
}

............分布式事务处理机制。
你这个本来就是企业业务分布式方案。

求助:java中同一个项目下的.java文件如何使用另一个.java文件里面的变量...
答:package b;public class B { public static void main(String[] args) { }}package a;import b.B;//类A、B在同一个工程下,而且不同包,类A用B的属性,插入包即可import b.B;public class A { public static void main(String[] args) { B b = new B(); }} ...

怎样在项目中使用存储过程
答:换言之, registerOutParameter 使用的是 JDBC 类型(因此它与数据库返回的 JDBC 类型匹配),而 getXXX 将之转换为 Java 类型。作为示例,下述代码先注册 OUT 参数,执行由 cstmt 所调用的已储存过程,然后检索在 OUT 参数中返回的值。方法 getByte 从第一个 OUT 参数中取出一个 Java 字节,而 get...

如何将同一个文件夹多个不同的excel(名称和数量均不确定)中的文本汇总...
答:可用VBA实现,方便快捷。如果你不会用VBA,那我教你一个其它办法来提取文件名。举例来说:图一:我准备要提取的文件夹的截图:这个文件夹中有四个文件,我想提取出这四个文件名来,怎么办?方法,在该文件夹下新建一个TXT文档“新建文本文档.txt”。输入以下代码:echo off for /f "delims=" %%a ...

列表示人员,行表示项目,统计excel表中某个人员在一个项目上共用了...
答:如下图,我是选用=SUMIF(对象范围,对象,对象项目的防范) 函数公式。张三 三天吃饭共用9 小时,如果有用请采纳。谢谢!

我有一个项目,该如何找投资呢?(我有好项目怎样找投资?)
答:而面对投资者的提问时,不要规避责任而扯开话题或给予模棱两可的答案,更不要虚构内容、过多修饰方案,预先做好充足的准备会给你带来更多自信。利用数据说话。跟风险投资公司谈判如何定价,往往是整个接触过程里的最为重要问题。所谓融资,最主要就是定价问题。通常来讲,风险投资符合任何一个投资的规律,就是风险和回报是...

如何评价一个项目使用了大量的oracle存储过程
答:强烈支持大量运用存储过程,最好100%用。效率高,用户happy 存储过程性能好2.存储过程代码可复用性好3.避免在程序中含有大量SQL,可移植性不好。这么多人在说用存储过程的优点,那我就来说说缺点:1、移植性问题这个搞数据库开发的人都能理解,是不是问题看系统的需求而定,这里就不多说了。如果数据...

java web项目中有很多的图片,如何存放?
答:一般情况下,前端服务器,跟后台的服务器,是分离开的,有不同的人去管理,如果项目小的话,可能就全放在一个。这个优化的化,你可以去了解下 CDN原理。这个是用来优化静态资源加载情况的。另一种情况是,显示的图片,不是前端构成的,是用户上传文件产生的,这种情况下,现在一般有专门的对象存储,用...

一个工作薄中有N多个工作表,如何利用函数根据产品的名称在所有工作表中...
答:最简单的办法是把N多个工作表合并为一张表,增加一个大类或者类型之类的列,能区分原始数据位于哪个表中即可。这样一个VLOOKUP就可以满足,具体公式相信你是会的。其次的办法是写N多个IFERROR(VLOOKUP(),"")的公式&连接起来,或者使用IF嵌套N多重,这个做法很不人性,写出的公式非常夸张,基本上是最...

Excel中如何在一个表格中引用另外表格里面的数据进行计算?
答:1、这是一个Excel工作薄中的两张表,分别为Sheet1和Sheet2,下面分别以表1和表2来代替。我们要把表2中的语文成绩导入到表1中,但是从图中可以看出表1和表2名字并不一一对应。2、选中表1,选中C2单元格,即语文项目中第一个要录入的成绩。选择“插入—函数”命令。3、在“或选择类别”中选择“...

eclipse 一个项目中 要建4个包,为什么建的包不是在同一目录(src)下...
答:选中src,点击右键在新建包试试 编程_菜鸟 | 发布于2012-11-30 举报| 评论 2 23 2条折叠回答 为您推荐: myeclipse eclipse没有web项目 eclipse字体大小设置 eclipse怎么建项目lib eclipse导入项目 eclipse小项目代码 eclipse新建项目 eclipse怎么导入项目 eclipse项目更新jar包 eclipse修改项目名称 其...