使用LINQ to SQL連線多套結構相同的資料庫

2021-09-06 08:25:09 字數 3923 閱讀 9691

在實際工作中,我們可能會遇到在同乙個程式中鏈結多套結構相同的資料庫的情況,雖然我認為這並不是好的設計,但是這也許並不在你的控制之中,比如你的公司有兩個客戶,用同一套系統,如果不把他們的庫分開,可能會帶來功能設計上的困難和資料的混亂,所以產生了兩套資料庫,結構一模一樣,只是資料不同。現在你要設計乙個對外介面給別的程式使用,程式有可能會請求a庫的資料,也有可能會請求b庫的資料,這如何去做呢?

顯而易見,使用不同的連線字串就ok了,但要讓**更工整一些,就得稍微花點點心思。下面是我寫的demo的截圖:

首先在本地的sql express中建立幾個簡單的用於測試的資料庫,再建立一張簡單的表,然後隨便插入兩條簡單的記錄:

create

database

testdb1

gouse

testdb1

gocreate

table

tb_user (

user_id

intidentity

,

user_name

nvarchar(20) not

null

, real_name

nvarchar(25) not

null

, descriptions

nvarchar(400) null,)

goinsert

into tb_user(user_name, real_name, descriptions) values('

jgg', '

蔣國綱', '碼農'

)insert

into tb_user(user_name, real_name) values('

zs', '張三'

)gocreate

database

testdb2

gouse

testdb2

gocreate

table

tb_user (

user_id

intidentity

,

user_name

nvarchar(20) not

null

, real_name

nvarchar(25) not

null

, descriptions

nvarchar(400) null,)

goinsert

into tb_user(user_name, real_name, descriptions) values('

us', '

uncle sam

', '

美國佬'

)insert

into tb_user(user_name, real_name) values('

jp', '

小日本')go

create

database

testdb3

gouse

testdb3

gocreate

table

tb_user (

user_id

intidentity

,

user_name

nvarchar(20) not

null

, real_name

nvarchar(25) not

null

, descriptions

nvarchar(400) null,)

goinsert

into tb_user(user_name, real_name, descriptions) values('

abcd

', '

efg', '

hijklmn')

insert

into tb_user(user_name, real_name, descriptions) values('

opq', '

rst', '

uvwxyz')

go

xml version="1.0" encoding="utf-8" 

?>

<

configuration

>

<

connectionstrings

>

<

add

name

="testdb1"

connectionstring

="data source=.\sqlexpress;initial catalog=testdb1;integrated security=true"

providername

="system.data.sqlclient"

/>

<

add

name

="testdb2"

connectionstring

="data source=.\sqlexpress;initial catalog=testdb2;integrated security=true"

providername

="system.data.sqlclient"

/>

<

add

name

="testdb3"

connectionstring

="data source=.\sqlexpress;initial catalog=testdb3;integrated security=true"

providername

="system.data.sqlclient"

/>

connectionstrings

>

configuration

>

using

system;

using

system.data.linq;

using

system.diagnostics;

using

system.configuration;

namespace

multidbmsconnectionsdemo

catch

(exception)

return

(datacontext)activator.createinstance(typedatacontext, strdbconn);}}

}

其中使用了activator,activator會根據傳入的type來建立對應的datacontext例項,當然你也可以使用泛型;另外如果傳入的連線字串的名稱不存在於配置檔案中的話就使用預設的鏈結,即建立datacontext的時候不帶引數。

這是例子:

//

一般的做法是:

//linquserdatacontext db = new linquserdatacontext();

//而現在是:

linquserdatacontext db = (linquserdatacontext) datacontextfactory.create(typeof(linquserdatacontext), combodbmschoosing.text);

小技巧,希望能夠讓你的**better一些。

**中使用了乙個linq to sql的幫助類,具體可以參考我另一篇blog:linq to sql使用教程

使用Flask SQLAlchemy連線多個資料庫

usr bin env python coding utf 8 from flask import flask from flask sqlalchemy import sqlalchemy 配置多個資料庫連線 sqlalchemy binds sqlalchemy database uri sql...

LINQ to SQL 資料庫連線

首先建立乙個mvc專案 這裡注意如果沒這個包 linq to sql 類 的話,那就是你安裝vs的時候沒有安裝需要去修改找到這個檔案安裝一下 新增之後 就可以開始連線資料庫了 選擇你需要連線的資料庫 然後吧表拖到dbml 然後新增控制器 我在控制器裡寫了乙個方法 例子,這個時候還需要去配置連線字串,...

SQL中表的連線,LINQTOSQL中表的連線

表的連線分為,內連線與外連線。外連線分為左外連線,右外連線。左連線是已左邊表中的資料為基準,若左表有資料右表沒有資料,則顯示左表中的資料右表中的資料顯示為空 sql 內連線 select from a,b where a.aid b.aid a,b表連線,a,b中均有的資料才顯示 左外連線 sele...