2011年9月23日 星期五

直接使用SQL MDF檔

在資料庫上建資料表

再連結資料庫使用是非常基本用法

但是如果設計與SERVER是不同台電腦時

不可能每次修改資料庫都重新匯入進去

時間上浪費許多


這邊需要安裝相對應的SQL Server 200X Express

2008 R2
SQLEXPR_x64_CHT.exe
SQLEXPR_x86_CHT.exe
SQLEXPR32_x86_CHT.exe

2008
SQLEXPRWT_x64_CHT.exe
SQLEXPRWT_x86_CHT.exe

2005
SQLEXPR_CHT.EXE

再配合

上一篇SqlConnection.ConnectionString 屬性


其中一項參數
AttachDbFilename
-或-
Extended Properties
-或-
Initial File Name

簡單來說

這是用來設定想要連接的資料庫相對或絕對路徑


但是要注意

1.
該台SERVER還是要安裝SQL SERVER

而且需要支援指定的MDF版本

2.
此時的Data Source是要設定此SERVER上SQL的資料庫掛載位置


參數解說:

<add name="ConnectionString" connectionString="Data Source=[SQL位置];AttachDbFilename=[MDF位置];Initial Catalog=[SQL名稱];Integrated Security=True" providerName="System.Data.SqlClient"/>

[SQL位置]:要掛載在哪個SQL伺服器上(.\SQLSERVER)


[MDF位置]:欲掛載的資料庫,可用絕對位置(C:\MyData\Data.mdf)或網頁App_Data目錄內(|DataDirectory|\Data.mdf)


[SQL名稱]:掛載後的資料庫名稱


在掛載時,切記版本不可高於電腦SQL SERVER所能支援的版本

當掛載不支援會顯示

舉個範例
顯示問題:因為版本為 661。這個伺服器支援 655 及更早的版本。不支援降級路徑。
這是將  SQL Server 2008 R2 版本的資料庫,佈署、附加到 SQL Server 2008 版本的環境上。
程式設計師的開發環境,安裝的是 SQL Server 2008 R2 版本,但是客戶端伺服器機器是:SQL Server 2008 版本。
基本上,在新版本 SQL Server 上的資料庫,是沒辦法直接使用附加、還原的方式,將資料庫搬移到舊版本的 SQL Server 上。


也提醒各位:
SQL Server 2008 R2 與 SQL Server 2008 是不同的版本;SQL Server 2008 R2 是目前最新的版本。

較新版本的資料庫是無法在舊版上使用的。

以下提供查詢 SQL Server 以及資料庫的版本資訊之方式:
USE master
GO
SELECT SERVERPROPERTY('ProductVersion') AS'執行個體的版本'
 SERVERPROPERTY('ProductLevel') AS'執行個體的版本層級',
 DATABASEPROPERTYEX('master','Version') AS'資料庫的內部版本號碼'


以下是已知的各 SQL Server 所用的資料庫版本號:
SQL Server 2005     :database version 611
SQL Server 2008     :database version 655
SQL Server 2008 R2:database version 661

若是將 SQL Server 2008 版本的資料庫,附加到 SQL Server 2008 R2 版本上。
也就是說:
將舊版的資料庫,附加到新版本的 SQL Server 上,將會看到以下類似的訊息:

將資料庫 'DB1' 從版本 655 轉換為目前版本 661。
資料庫 'DB1' 正在執行從版本 655 升級到版本 660 的步驟。
資料庫 'DB1' 正在執行從版本 660 升級到版本 661 的步驟。
--
Converting database 'DB1' from version 655 to the current version 661.
Database 'DB1' running the upgrade step from version 655 to version 660.
Database 'DB1' running the upgrade step from version 660 to version 661.

2011年9月11日 星期日

ASP連結資料庫參數

SqlConnection.ConnectionString 屬性

命名空間:System.Data.SqlClient


基本語法:
Integrated Security=SSPI;Initial Catalog=Northwind;Data Source=(local)

下列表格列出ConnectionString關鍵字的有效名稱


關鍵字

預設

描述

Addr

N/A

資料來源的同義字。

Address

N/A

資料來源的同義字。

App

N/A

應用程式名稱的同義字。

Application Name

N/A

應用程式的名稱,如果沒有提供應用程式名稱,則為 '.NET SQLClient Data Provider'。

應用程式名稱可以有 128 個 (含) 以下的字元。

Asynchronous Processing

-或-

Async

'false'

如果為 true,啟用非同步作業支援。 可辨認的值為 truefalseyesno

AttachDBFilename

-或-

Extended Properties

-或-

Initial File Name

N/A

主要資料庫檔案的名稱,包括可附加資料庫的完整路徑名稱。 只有具有 .mdf 副檔名的主要資料檔案才能支援 AttachDBFilename。

如果在連接字串中指定了 AttachDBFileName 索引鍵的值,則會附加資料庫,而且資料庫會變成連線的預設資料庫。

如果不指定此索引鍵,且若先前已附加資料庫,該不會重新附加此資料庫。 先前附加的資料庫會做為連接的預設資料庫。

如果和 AttachDBFileName 索引鍵一同指定此索引鍵,會以此索引鍵的值為別名。 但是,如果另一個附加的資料庫已使用該名稱,則連線會失敗。

藉由使用 DataDirectory 替換字串,路徑可以是絕對或相對路徑。 如果使用 DataDirectory,則資料庫檔案必須存在於替換字串指向之目錄的子目錄。

注意事項注意事項
不支援遠端伺服器、HTTP 和 UNC 路徑名稱。

必須使用關鍵字 'database' (或其中一個別名 (Alias)) 指定資料庫名稱,如下所示:

"AttachDbFileName=|DataDirectory|\data\YourDB.mdf;integrated security=true;database=YourDatabase"

如果記錄檔出現在與資料檔案相同的目錄中,而且在嘗試附加主要資料檔案時使用了 'database' 關鍵字,便會產生錯誤。 在這種情況下,請移除該記錄檔。 附加資料庫之後,便會自動依據實體路徑來產生新的記錄檔。

Connection Lifetime

-或-

Load Balance Timeout

0

當連接傳回集區時,其建立時間會與目前時間相比較,如果該時間 (以秒為單位) 超過 Connection Lifetime 指定的值,則會終結連接。 這有助於在叢集組態中強制進行執行中伺服器和剛上線伺服器之間的負載平衡 (Load Balancing)。

零 (0) 的值會導致共用連接產生連接上限逾時的狀況。

Connect Timeout

-或-

Connection Timeout

-或-

Timeout

15

在終止嘗試並產生錯誤之前,要等待伺服器連接的時間長度 (以秒為單位)。

有效的值會大於或等於 0,而且小於或等於 2147483647。

Context Connection

'false'

如果應該建立與 SQL Server 的同處理序連接,則為 true

Current Language

-或-

Language

N/A

設定用於資料庫伺服器警告或錯誤訊息的語言。

語言名稱可以有 128 個 (含) 以下的字元。

Data Source

-或-

Server

-或-

Address

-或-

Addr

-或-

Network Address

N/A

要連接 SQL Server 的執行個體之名稱或網路位址。 可在伺服器名稱後指定通訊埠編號:

server=tcp:servername, portnumber

指定本機執行個體時,永遠使用 (local)。 若要強制通訊協定,請加入下列其中一個前置詞:

np:(local), tcp:(local), lpc:(local)

資料來源必須使用 TCP 格式或具名管道格式。

TCP 格式如下:

  • tcp:<主機名稱>\<執行個體名稱>

  • tcp:<主機名稱>,<TCP/IP 連接埠號碼>

TCP 格式必須是以前置詞 "tcp:" 開頭,後面接著資料庫執行個體,如主機名稱和執行個體名稱所指定。

主機名稱必須以下列其中一種方式指定:

  • NetBIOSName

  • IPv4Address

  • IPv6Address

執行個體名稱用於解析為資料庫執行個體裝載所在的特定 TCP/IP 連接埠號碼。 或者,也可以直接指定 TCP/IP 連接埠號碼。 如果兩個執行個體名稱和連接埠號碼都不存在,則會使用預設的資料庫執行個體。

具名管道的格式如下:

  • np:\\<主機名稱>\pipe\<管道名稱>

具名管道格式必須以前置詞 "np:" 開頭,後面跟著具名管道名稱。

主機名稱必須以下列其中一種方式指定:

  • NetBIOSName

  • IPv4Address

  • IPv6Address

管道名稱用於識別 .NET Framework 連接目標的資料庫執行個體。

如果指定了 Network 索引鍵的值,不應指定前置詞 "tcp:" 與 "np:"。

注意事項注意事項
ADO.NET 2.0 不支援 SQL Server 2000 (含) 以下版本在共用記憶體上使用非同步的命令。不過,您可以強制使用 TCP 來取代共用記憶體,方法是在連接字串的伺服器名稱前面加上 tcp: 前置字元,或是使用 localhost。

Encrypt

'false'

當為 true 時,如果伺服器已安裝憑證,則 SQL Server 會在用戶端與伺服器之間的所有資料上使用 SSL 加密 (Encryption)。 可辨認的值為 truefalseyesno

Enlist

'true'

true 表示,SQL Server 連接集區工具會在建立執行緒的目前交易內容中自動登記連接。

Failover Partner

N/A

容錯移轉合作夥伴的名稱,其中設定資料庫鏡像。

如果此索引鍵的值是 "",則初始目錄必須存在,並且它的值不能為 ""。

伺服器名稱可以有 128 個 (含) 以下的字元。

如果您指定容錯移轉合作夥伴,但未對合作夥伴伺服器進行資料庫鏡射設定,且主要伺服器不可用,則會連線失敗。

如果您指定容錯移轉合作夥伴,且未對主要伺服器進行資料庫鏡射設定,若主要伺服器可用,則可成功連接主要伺服器 (以 Server 關鍵字指定)。

.NET Framework 1.0 或 1.1 版不支援 Failover Partner 關鍵字。

Initial Catalog

-或-

Database

N/A

資料庫的名稱。

資料庫名稱可以有 128 個 (含) 以下的字元。

Integrated Security

-或-

Trusted_Connection

'false'

如果為 false,則會在連接中指定使用者 ID 和密碼。 如果為 true,則會使用目前的 Windows 帳戶認證進行驗證。

可辨認的值為 truefalseyesnosspi (建議使用),其相當於 true

如果使用者識別碼和密碼已指定,且整合安全性設定設為 true,則會略過使用者識別碼和密碼,並使用整合式安全性。

Min Pool Size

0

集區中允許連接的最小數目。

有效值大於或等於 0。 在這個欄位中的零 (0) 表示最初未開啟最小連接數目。

大於 Max Pool Size 的值會產生錯誤。

Max Pool Size

100

集區中允許的最大連接數目。

有效值大於或等於 1。 小於 Min Pool Size 的值會產生錯誤。

MultipleActiveResultSets

'false'

如果為 true,則應用程式可維護 Multiple Active Result Set (MARS)。 如果為 false,則應用程式必須處理或取消一個批次的所有結果集,才能夠執行該連接的其他批次。

辨認的值為 truefalse

.NET Framework 1.0 或 1.1 版不支援該關鍵字。

Network Library

-或-

Network

-或-

Net

N/A

網路程式庫用來建立 SQL Server 的執行個體的連接。 支援的值包含:

dbnmpntw (具名管道)

dbmsrpcn (多重通訊協定、Windows RPC)

dbmsadsn (Apple Talk)

dbmsgnet (VIA)

dbmslpcn (共用記憶體)

dbmsspxn (IPX/SPX)

dbmssocn (TCP/IP)

Dbmsvinn (Banyan Vines)

對應的網路 DLL 必須安裝在您連接的系統上。 如果您沒有指定網路而且使用本機伺服器 (例如 "." 或 "(local)"),則會使用共用記憶體。 在這個範例中,網路程式庫是 Win32 Winsock TCP/IP (dbmssocn),1433 則是使用的通訊埠。




Network Library=dbmssocn;Data Source=000.000.000.000,1433;

Packet Size

8192

用來與 SQL Server 的執行個體通訊的網路封包之大小 (以位元組為單位)。

封包大小可以大於或等於 512,並且小於或等於 32767。

Password

-或-

PWD

N/A

正在登入之 SQL Server 帳戶的密碼。 不建議使用。 為了維持高安全性等級,強烈建議您改為使用 Integrated SecurityTrusted_Connection 關鍵字。

密碼必須在 128 個字元 (含) 以下。

Persist Security Info

-或-

PersistSecurityInfo

'false'

當設定為 falseno (建議使用) 時,如果連接開啟或曾經處於開啟狀態,則不會將安全性相關資訊 (如密碼) 當做連接的一部分傳回。 重設連接字串會將所有包含密碼的連接字串值重設。 可辨認的值為 truefalseyesno

Pooling

'true'

當此索引鍵的值設定為 true 時,任何新建立的連接會在由應用程式關閉時加入至集區。 下次嘗試開啟同一個連線時,會從集區擷取該連線。

如果這些連線具有相同的連接字串,則視為相同。 不同的連線會有不同的連接字串。

此索引鍵的值可以是 "true"、"false"、"yes" 或 "no"。

Replication

'false'

如果使用連接時支援複寫,則為 true

Transaction Binding

Implicit Unbind

控制與已登記之 System.Transactions 交易的連接關聯。

可能值為:

Transaction Binding=Implicit Unbind;

Transaction Binding=Explicit Unbind;

隱含解除繫結會造成連接在結束時與交易中斷。 在中斷連結之後,會在自動認可模式中執行其他的連接要求。 如果在交易為作用中時執行要求,便不會檢查 System.Transactions.Transaction.Current 屬性。 在交易結束之後,會在自動認可模式中執行其他要求。

如果系統在完成最後一個指令之前結束交易 (在使用區塊的範圍中),會擲回InvalidOperationException

明確解除繫結會造成連接與交易保持在附加狀態,除非連接關閉或呼叫明確的 SqlConnection.TransactionEnlist(null) 從 .NET Framework 4 版 開始,對 Implicit Unbind (隱含解除繫結) 有所變更,造成 Explicit Unbind (明確解除繫結) 已經過時。 如果 Transaction.Current 不是已登記的交易或如果已登記的交易不是作用中時,便會擲回 InvalidOperationException

TrustServerCertificate

'false'

設為 true 時,SSL 會用來加密通道,但略過驗證信任的憑證鏈結查核。 如果 TrustServerCertificate 設定為 true 且 Encrypt 設定為 false,則不會加密通道。 可辨認的值為 truefalseyesno 如需詳細資訊,請參閱連接字串語法 (ADO.NET)

Type System Version

N/A

字串值,表示應用程式預期的型別系統。 可能值為:

Type System Version=SQL Server 2000;

Type System Version=SQL Server 2005;

Type System Version=SQL Server 2008;

Type System Version=Latest;

設為 SQL Server 2000 時,會使用 SQL Server 2000 型別系統。 連接到 SQL Server 2005 執行個體時,會執行下列轉換:

XML 轉換成 NTEXT

UDT 轉換成 VARBINARY

VARCHAR(MAX)、NVARCHAR(MAX) 和 VARBINARY(MAX) 分別轉換成 TEXT、NEXT 和 IMAGE。

設為 SQL Server 2005 時,會使用 SQL Server 2005 型別系統。 對於目前版本的 ADO.NET,不執行任何轉換。

設為 Latest 時,使用這個主從組能處理的最新版本。 當用戶端和伺服器元件更新時,這也會自動更新。

User ID

-或-

UID

-或-

N/A

SQL Server 登入帳戶。 不建議使用。 為了維持高安全性等級,強烈建議您改為使用 Integrated SecurityTrusted_Connection 關鍵字。

使用者 ID 必須在 128 個字元 (含) 以下。

User Instance

'false'

值,指出是否將連接從預設 SQL Server Express 執行個體,重新導向至在呼叫端帳戶下執行之執行階段啟始的執行個體。

Workstation ID

-或-

WSID

本機電腦名稱

連接至 SQL Server 的工作站名稱。

ID 必須在 128 個字元 (含) 以下。

2011年9月10日 星期六

ASP網頁資訊傳遞 方法比較

有在設計網頁的基本上都會遇到
這邊介紹較常使用的2種記錄瀏覽資訊的方法

還有一種不在表內:Cache

重點整理:
ViewState
1.只儲存目前瀏覽的那一頁,通常是記錄PostBack的值
2.原理:Html上Hidden Field,透過Base-64編碼
3.可在WebConfig設定使其加密:<Pages ViewStateEncryptionMode="Always" />

Session
1.可用於不同頁面,資訊儲存於Server端,通常用來傳遞重要或須保密的參數
2.佔用Server端的記憶體空間,如同一時間連線量過大,容易使記憶體損壞
3.可設定存活時間,如果中途發生錯誤或某些情況時,會使得Session遺失

Cookies
1.存於Cloent端,還讀的到即表示資料還可使用
2.因為是存在Cloent端,所以容易被竊取裡面的資訊,因此最好不要儲存重要或須保密的資訊
3.有些Single Sign On會透過Cookie加密來存放帳號資訊
4.String的存放格式

Application
1.所有User存取Server端內同一份
2.只有在Web application關閉或重新啟動時才會清除
3.與Session一樣吃Server端記憶體

Cache
1.通常應用於靜態網頁快取
2.可設定時間ˋHit Rate或First In First Out當作條件
3.同Session與Application吃Server端記憶體

補充資料: