1. 程式人生 > >在sql server 2000中儲存照片和文字的兩種方法。

在sql server 2000中儲存照片和文字的兩種方法。

在Sql server 2000裡建表時把照片轉化為byte[]就可以,然後取出來就可以

用image型別

方法:
1、建立過程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str

2、建表和初始化資料
create table 表名 (編號 int,image列名 image)
go
insert 表名 values(1,0x) -- 必須的,且不是null
insert 表名 values(2,0x) -- 必須的,且不是null
go

3、讀入
sp_textcopy '你的伺服器名','sa','你的密碼','庫名','表名','image列名','c:/圖片.bmp','where 編號=1','I' --注意條件是 編號=1

sp_textcopy '你的伺服器名','sa','你的密碼','庫名','表名','image列名','c:/bb.doc','where 編號=2','I' --注意條件是 編號=2

go

4、讀出成檔案
sp_textcopy '你的伺服器名','sa','你的密碼','庫名','表名','image列名','c:/圖片.bmp','where 編號=1','O' --注意條件是 編號=1

sp_textcopy '你的伺服器名','sa','你的密碼','庫名','表名','image列名','c:/bb.doc','where 編號=2','O' --注意條件是 編號=2
go

如果報textcopy不是可執行檔案的話,你就到
C:/Program Files/Microsoft SQL Server/MSSQL/Binn
目錄下拷備 textcopy.exe到:
C:/Program Files/Microsoft SQL Server/80/Tools/Binn

bcp處理二進位制檔案參考

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_binaryIO]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_binaryIO]
GO

/*--bcp 實現二進位制檔案的匯入匯出

支援image,text,ntext欄位的匯入/匯出
image適合於二進位制檔案,包括:Word文件,Excel文件,圖片,音樂等
text,ntext適合於文字資料檔案

注意:匯入不會新增記錄,所以匯入前要對錶進行初始化,即插入記錄
匯入時,將覆蓋滿足條件的所有行
匯出時,將把所有滿足條件的行匯出到指定檔案中


此儲存過程僅用bcp實現

--鄒建 2003.08(引用請保留此資訊)---*/

/*--呼叫示例
--資料匯出
exec p_binaryIO 'zj','','','acc_演示資料..tb','img','c:/zj1.dat'

--資料匯入
exec p_binaryIO 'zj','','','acc_演示資料..tb','img','c:/zj1.dat','',0
--*/
Create proc p_binaryIO
@servename varchar (30),--伺服器名稱
@username varchar (30), --使用者名稱
@password varchar (30),--密碼
@tbname varchar (500), --資料庫..表名
@fdname varchar (30), --欄位名
@fname varchar (1000),--目錄+檔名,處理過程中要使用/覆蓋:@filename+_temp
@tj varchar (1000)='', --處理條件.對於資料匯入,如果條件中包含@fdname,請指定表名字首
@isout bit=1--1匯出((預設),0匯入
AS
declare @fname_in varchar(1000)--bcp處理應答檔名
,@fsize varchar(20)--要處理的檔案的大小
,@m_tbname varchar(50)--臨時表名
,@sql varchar(8000)

--則取得匯入檔案的大小
if @isout=1
set @fsize='0'
else
begin
create table #tb(可選名 varchar(20),大小 int
,建立日期 varchar(10),建立時間 varchar(20)
,上次寫操作日期 varchar(10),上次寫操作時間 varchar(20)
,上次訪問日期 varchar(10),上次訪問時間 varchar(20),特性 int)
insert into #tb
exec master..xp_getfiledetails @fname
select @fsize=大小 from #tb
drop table #tb
if @fsize is null
begin
print '檔案未找到'
return
end

end

--生成資料處理應答檔案
set @m_tbname='[##temp'+cast(newid() as varchar(40))+']'
set @sql='select * into '[email protected]_tbname+' from(
select null as 型別
union all select 0 as 字首
union all select '[email protected]+' as 長度
union all select null as 結束
union all select null as 格式
) a'
exec(@sql)
select @[email protected]+'_temp'
,@sql='bcp "'[email protected]_tbname+'" out "'[email protected]_in
+'" /S"'[email protected]
+case when isnull(@username,'')='' then ''
else '" /U"'[email protected] end
+'" /P"'+isnull(@password,'')+'" /c'
exec master..xp_cmdshell @sql
--刪除臨時表
set @sql='drop table '[email protected]_tbname
exec(@sql)

if @isout=1
begin
set @sql='bcp "select top 1 '[email protected]+' from '
[email protected]+case isnull(@tj,'') when '' then ''
else ' where '[email protected] end
+'" queryout "'[email protected]
+'" /S"'[email protected]
+case when isnull(@username,'')='' then ''
else '" /U"'[email protected] end
+'" /P"'+isnull(@password,'')
+'" /i"'[email protected]_in+'"'
exec master..xp_cmdshell @sql
end
else
begin
--為資料匯入準備臨時表
set @sql='select top 0 '[email protected]+' into '
[email protected]_tbname+' from ' [email protected]
exec(@sql)

--將資料匯入到臨時表
set @sql='bcp "'[email protected]_tbname+'" in "'[email protected]
+'" /S"'[email protected]
+case when isnull(@username,'')='' then ''
else '" /U"'[email protected] end
+'" /P"'+isnull(@password,'')
+'" /i"'[email protected]_in+'"'
exec master..xp_cmdshell @sql

--將資料匯入到正式表中
set @sql='update '[email protected]
+' set '[email protected]+'=b.'[email protected]
+' from '[email protected]+' a,'
[email protected]_tbname+' b'
+case isnull(@tj,'') when '' then ''
else ' where '[email protected] end
exec(@sql)

--刪除資料處理臨時表
set @sql='drop table '[email protected]_tbname
end

--刪除資料處理應答檔案
set @sql='del '[email protected]_in
exec master..xp_cmdshell @sql
go


*
FileStream fs;
fs = File.OpenRead("c:/1.ico");
byte[] temp = new byte[fs.Length];
int count = (int)fs.Length;
fs.Read(temp,0,count);

相關推薦

sql server 2000儲存照片文字方法

在Sql server 2000裡建表時把照片轉化為byte[]就可以,然後取出來就可以 用image型別 方法:1、建立過程CREATE PROCEDURE sp_textcopy ( @srvname varchar (30), @login varchar (30),

SQL server 2012 儲存過程除錯

1、儲存過程無法直接除錯 選中要除錯的儲存過程,右擊“執行儲存過程”,根據是否需要輸入引數,若需要則可以先隨便輸入,跳轉到Exec 頁面後,輸入正確合理的引數進行,F10,開始除錯,F11,進入到被呼叫的儲存過程中。 結論:無法很好的與C#客戶端程式聯合起

Sql Server 2008儲存過程傳入表值引數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

SQL Server 2008的PivotUnPivot

                今天給新成員講解PIVOT 和 UNPIVOT示例,順便整理了一下其用法。這是自SQL Server 2005起提供的新功能。首先看PIVOT示例:基本表資料:IF NOT OBJECT_ID('tb_Income') IS NULL    DROP TABLE [tb_Inc

如何修改SQL Server 2000身份驗證模式系統管理員

大家安裝SQL Server 2000時,很多人都習慣性的一路下一步,最後就會以windows身份驗證作為登入資料庫伺服器的方式,假如有一天你後悔了,想以sql server的驗證方式登陸,那怎麼辦呢?我把我的經驗分享給大家: 1,下面以作業系統windows 2000上的S

64位Win7作業系統安裝SQL Server 2000遇到的問題

      通過ODBC/JDBC連線程式和資料庫時,異常報錯“在指定的 DSN 中,驅動程式和應用程式之間的體系結構不匹配”時,是因為你使用64位的管理工具“資料來源(ODBC)”來建立的SQL Server資料庫JDBC連線。       解決方法:執行“C:\Windows\SysWOW64\odbc

如何在sql server 2005 安裝northwind pubs 資料庫

step 1:在微軟官方網站下載 SQL2000SampleDb.msi ,去 http://www.microsoft.com/en-us/download/details.aspx?id=23654 這裡下載; step 2:執行安裝 SQL2000SampleDb.

SQL Server索引的碎片填充因子

簡介     在SQL Server中,儲存資料的最小單位是頁,每一頁所能容納的資料為8060位元組.而頁的組織方式是通過B樹結構(表上沒有聚集索引則為堆結構,不在本文討論之列)如下圖:          在聚集索引B樹中,只有葉子節點實際儲存資料,而其他根節點和中

修改SQL Server 2000身份驗證模式系統管理員

下面以作業系統Windows 2000上的SQL Server 2000為例,對誤將身份驗證模式選擇為“windows身份驗證模式”的資料庫進行修改,操作步驟為:  1. 開啟企業管理器,依次展開伺服器組,用右鍵單擊軟體使用的伺服器。  2. 在彈出的快捷選單,執行“屬性”命

sql server 2000出現這樣的錯誤應該如何修復?

  使用DBCC CHECKDB('CY2005')檢測資料庫出現錯誤 訊息 7995,級別 16,狀態 1,第 1 行資料庫 'CY2005' 在 sysobjects、sysindexes、syscolumns 或 systypes 中存在一致性錯誤,妨礙了進一步的 C

VC6.0通過ADO呼叫SQL Server 2000儲存過程出現引數過多的問題

今天在做畢業設計的時候遇到一個很奇怪的問題,我以前通過傳遞三個引數的儲存過程呼叫都還是很成功的,為什麼今天就不行了呢?程式碼如下: HRESULT hr; if (m_pCmd == NULL) { hr = m_pCmd.Creat

SQL Server 2000查詢表名,列名及欄位型別

經常碰到一些忘記表名稱的情況,此時只記得個大概,此時可通過查詢系統表Sysobjects找到所要的表名,如要查詢包含使用者的表名,可通過以下SQL語句實現, Select * From sysobjects Where name like '%user%' 如果知道列名,想查詢包含有該列的表名,可加上

Sql Server 聚集索引掃描 Scan Direction的方式------FORWARD BACKWARD

最近發現一個分頁查詢儲存過程中的的一個SQL語句,當聚集索引列的排序方式不同的時候,效率差別達到數十倍,讓我感到非常吃驚由此引發出來分頁查詢的情況下對大表做Clustered Scan的時候,不同情況下會選擇FORWARD 或者 BACKWARD差別,以及建立聚集索引時,選擇索引列的排序方式的一些思考廢話不多

sql server啟動不了, MSSQL 18052錯誤: 9003,嚴重度: 20,狀態: 1 . sql server 2000 附加資料庫沒日誌,及安裝異常問題無法通過IP來聯結

sql server啟動不了, MSSQL 18052錯誤: 9003,嚴重度: 20,狀態: 1 .   問題現象: 系統日誌檔案(控制面板–管理工具–系統日誌) 能找到以下兩條錯誤: 17052: 無法恢復 master 資料庫。正在退出。 18052: 錯誤: 9003

SQL Server 2008輸出字串並換行的方法

在SQL Server中想輸出字串並換行的方法,示例如下: print '中國'+char(13)+char(10)+'人民' declare   @a   varchar(20) set   @a= 'aaa '+char(13)+char(10)+ 'bbbb '

Java的ReentrantLocksynchronized鎖定機制的對比

優化 實現 維護 pla 所有 投票 明顯 拋出異常 數據 多線程和並發性並不是什麽新內容,但是 Java 語言設計中的創新之一就是,它是第一個直接把跨平臺線程模型和正規的內存模型集成到語言中的主流語言。核心類庫包含一個 Thread 類,可以用它來構建、啟動和操縱線程,J

在Unity“Debug.Log”“Print”列印方式的區別

先寫個指令碼“PrintAndDebug”,掛在Main Camera 元件上,在指令碼的 Start 函式裡通過這兩種方式列印一段內容 然後執行u3d,看控制檯列印日誌,如下圖 在這裡可以明瞭的看到Debug.Log是直接打印出來的 而Print是繼承自MonoBehaviour的,

SQL Server查詢前N條記錄的三方法

SQL Server查詢前N條記錄是我們經常要用到的操作,下面對SQL Server查詢前N條記錄的方法作了詳細的介紹,如果您感興趣的話,不妨一看。 SQL Server查詢前N條記錄: 因為id可能不是連續的,所以不能用取得10<id<20的記錄的方法。 有三種方法可以實現: 一、

java工作筆記:web 程式設計關於jnijna工具操作效能對比測試

       第一次發部落格有點緊張哈。        最近剛剛公司轉崗從底層C語言的編寫到做Java的web restful架構。其中需要呼叫底層C++程式碼庫。所以對於選擇哪種方法從Java呼叫C的程式碼做了簡單地學習和對比測試。在這裡把他們貼出了。希望能有大神出來指點

儲存framebuffer資料的方法(gsnapT32 d.image命令)及lookat工具使用

1.save framebuffer (1) method1:    we can dump mem,and use t32 to resume framebuffer. Kernel space Framebuffer address: setup_fb_mem ph v