自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server 2008 FileStream支持“真功夫版”

數(shù)據(jù)庫(kù) SQL Server
以下的文章主要是淺談SQL Server 2008 FileStream支持,愿在你學(xué)習(xí)SQL Server 2008 FileStream支持中以起到拋磚引玉的作用。

文章主要描述的是SQL Server 2008 FileStream支持,你如果對(duì)SQL Server 2008 FileStream支持有興趣的話你就可以點(diǎn)擊以下的文章進(jìn)行觀看了,你如果對(duì)其有興趣的話你就可以點(diǎn)擊以下的文章進(jìn)行觀看了。

服務(wù)器有一個(gè)屬性,即指定該服務(wù)器是怎么支持文件流的

實(shí)際上文件流的出現(xiàn)就是為了解決對(duì)大對(duì)象的存儲(chǔ)中一個(gè)矛盾。

對(duì)于大對(duì)象,第一種方式是存儲(chǔ)在數(shù)據(jù)庫(kù)里面,這種方式一般使用image字段,或者varbinary(max)來(lái)做。好處是可以統(tǒng)一備份,但實(shí)際上讀取效率比較低。大于1MB的文件就會(huì)有問題

第二種方式是文件存儲(chǔ)在文件系統(tǒng),而數(shù)據(jù)庫(kù)中存儲(chǔ)了一個(gè)路徑。這種方式數(shù)據(jù)庫(kù)壓力減輕了,卻很不方便統(tǒng)一備份和管理。

SQL SERVER 2008的文件流其實(shí)就是二者的統(tǒng)一。文件還是放在文件系統(tǒng)的,但由數(shù)據(jù)庫(kù)進(jìn)行管理??梢越y(tǒng)一備份和還原。

FILESTREAM不是一個(gè)字段類型,它定義在字段后面,聲明該列用于文件流即可。該列依然是用二進(jìn)制保存的

一般都是在數(shù)據(jù)庫(kù)中要特別添加一個(gè)文件組和一個(gè)或多個(gè)文件用來(lái)存儲(chǔ)FileStream的數(shù)據(jù)的。

然后,在磁盤上面有一個(gè)目錄(Test),里面會(huì)有一個(gè)filestream.hdr文件

客戶端是透明的。無(wú)需要什么修改。

*/

這段代碼的作用是啟用服務(wù)器支持文件流

 

  1. EXEC sp_filestream_configure  
  2. @enable_level = 3;  
  3. CREATE DATABASE Archive  
  4. ON  
  5. PRIMARY ( NAME = Arch1,  
  6. FILENAME = 'c:labarchdat1.mdf'),  
  7. FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = Arch3,  
  8. FILENAME = 'c:labfilestream1')  
  9. LOG ON ( NAME = Archlog1,  
  10. FILENAME = 'c:labarchlog1.ldf')  
  11. GO  
  12. CREATE TABLE Archive.dbo.Records  
  13. (  
  14. [Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,  
  15. [SerialNumber] INTEGER UNIQUE,  
  16. [Chart] VARBINARY(MAX) FILESTREAM NULL  

這一句指示該列要用文件流存儲(chǔ)

這里還可以做一些改進(jìn),就是加入文件類型的一個(gè)字段(FileName)

 

 

  1. )  
  2. FILESTREAM_ON FileStreamGroup1   

 

該行指示存儲(chǔ)到哪一個(gè)文件流文件組

 

GO

 

下面代碼無(wú)法運(yùn)行,如果一個(gè)表要使用文件流,則必須有一個(gè)GUID列,而且作為唯一鍵列

 

  1. CREATE TABLE Archive.dbo.Records2  
  2. (  
  3. --[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,  
  4. [SerialNumber] INTEGER UNIQUE,  
  5. [Chart] VARBINARY(MAX) FILESTREAM NULL 

--這一句指示該列要用文件流存儲(chǔ)

)

 

FILESTREAM_ON FileStreamGroup1 --該行指示存儲(chǔ)到哪一個(gè)文件流

 

  1. GO  
  2. INSERT INTO Archive.dbo.Records  
  3. VALUES (newid (), 1, NULL);  
  4. GO  
  5. INSERT INTO Archive.dbo.Records  
  6. VALUES (newid (), 2,  
  7. CAST ('' as varbinary(max)));  
  8. GO  
  9. INSERT INTO Archive.dbo.Records  
  10. VALUES (newid (), 3,  
  11. CAST ('Seismic Data' as varbinary(max)));  
  12. GO  
  13. UPDATE Archive.dbo.Records  
  14. SET [Chart] = CAST('Xray 1' as varbinary(max))  
  15. WHERE [SerialNumber] = 2;  
  16. DELETE Archive.dbo.Records  
  17. WHERE SerialNumber = 1;  
  18. GO  
  19. SELECT * FROM Archive.dbo.Records  
  20. GO 

對(duì)于客戶端編程來(lái)說,是沒有區(qū)別的,這只是服務(wù)器的一個(gè)存儲(chǔ)改變

保存

 

保存音樂文件

  1. try  
  2. {  
  3. OpenFileDialog dialog = new OpenFileDialog();  
  4. dialog.Filter = "音樂文件(*.mp3)|*.mp3";  
  5. if (dialog.ShowDialog() == DialogResult.OK)  
  6. {  
  7. using (SqlConnection conn = new SqlConnection(CONNECTIONSTRING)) {  
  8. conn.Open();  
  9. using (SqlCommand cmd = conn.CreateCommand()) {  
  10. cmd.CommandText = "INSERT INTO BINARYTABLE(BINARYCONTENTS) VALUES(@file)";  
  11. FileStream fs = new FileStream(dialog.FileName, FileMode.Open);  
  12. byte[] bytes = new byte[fs.Length];  
  13. fs.Read(bytes, 0, bytes.Length);  
  14. SqlParameter param = new SqlParameter("@file", SqlDbType.VarBinary,1000000);  
  15. param.Value = bytes;  
  16. cmd.Parameters.Add(param);  
  17. MessageBox.Show(cmd.ExecuteNonQuery() == 1 ? "成功保存文件" : "保存文件失敗");  
  18. fs.Close();  
  19. }  
  20. conn.Close();  
  21. }  
  22. }  
  23. else  
  24. MessageBox.Show("用戶取消了操作");  
  25. }  
  26. catch (Exception ex)  
  27. {  
  28. MessageBox.Show(ex.Message);  

讀取

讀取音樂文件

  1. try  
  2. {  
  3. using (SqlConnection conn = new SqlConnection(CONNECTIONSTRING)) {  
  4. conn.Open();  
  5. using (SqlCommand cmd = conn.CreateCommand()) {  
  6. cmd.CommandText = "select top 1 BinaryContents from BinaryTable order by ID desc";  
  7. SqlDataReader reader = cmd.ExecuteReader();  
  8. SaveFileDialog dialog = new SaveFileDialog();  
  9. dialog.Filter = "音樂文件(*.mp3)|*.mp3";  
  10. if (dialog.ShowDialog() == DialogResult.OK)  
  11. {  
  12. reader.Read();  
  13. System.Data.SqlTypes.SqlBinary result = reader.GetSqlBinary(0);//值得注意的是這里并沒有什么GetSqlImage的方法  
  14. FileStream fs = new FileStream(dialog.FileName, FileMode.Create);  
  15. fs.Write(result.Value, 0, result.Length);  
  16. fs.Close();  
  17. reader.Close();  
  18. }  
  19. else  
  20. MessageBox.Show("用戶取消操作");  
  21. }  
  22. conn.Close();  
  23. }  
  24. }  
  25. catch (Exception ex) { MessageBox.Show(ex.Message); } 

以上的相關(guān)內(nèi)容就是對(duì)SQL Server 2008 FileStream支持的介紹,望你能有所收獲。

【編輯推薦】

  1. SQL Server2000連接錯(cuò)誤的緣由有哪些?
  2. SQL Server實(shí)例中對(duì)另個(gè)實(shí)例的調(diào)用
  3. SQL Server identity列,美中不足之處
  4. SQL Server DateTime數(shù)據(jù)類型的另類解讀
  5. SQL Server 2000的安全策略的正確打造

 

責(zé)任編輯:佚名 來(lái)源: 清華大學(xué)出版社
相關(guān)推薦

2009-02-24 13:15:22

FILESTREAM新特性SQL Server

2009-02-25 11:42:43

FILESTREAM文件流文件管理

2010-11-15 11:25:20

職場(chǎng)

2011-08-29 18:02:29

SQL Server FileStream

2011-04-22 16:24:05

ME OFFICE 6愛普生傳真

2009-10-13 15:43:03

網(wǎng)絡(luò)拓?fù)涔芾?/a>

2010-11-09 16:03:27

2011-10-05 20:57:31

復(fù)合一體機(jī)常見問題

2018-07-09 16:03:23

AI教育人工智能

2011-12-07 13:21:42

超云服務(wù)器云計(jì)算

2009-04-16 17:55:15

擴(kuò)展熱插拔SQL Server

2009-09-08 14:45:24

Linq to SQL支持SQL Serve

2011-04-07 09:56:53

SQL Server 內(nèi)存

2011-03-28 16:39:41

SQL Server

2010-07-22 14:52:00

SQL Server

2009-08-12 09:19:26

SQL Server

2011-02-18 17:31:18

SQL Server

2010-03-23 09:52:23

SQL Server

2009-04-16 17:44:31

2009-04-16 18:15:19

動(dòng)作審核審核活動(dòng)SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)