1. 程式人生 > >ASP中呼叫儲存過程、語法、寫法-sql server資料庫,return,output

ASP中呼叫儲存過程、語法、寫法-sql server資料庫,return,output

ASP與儲存過程(Stored Procedures)的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜點的應用,就全都語焉不詳了。
現在,我基本上通過呼叫儲存過程訪問SQL Server,以下的文字雖不敢保證絕對正確,但都是實踐的總結,希望對大家能有幫助。 
儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。
定義總是很抽象。儲存過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在資料庫中的(這裡我們只談SQL Server)。如果我們通過建立儲存過程以及在ASP中呼叫儲存過程,就可以避免將SQL語句同ASP程式碼混雜在一起。這樣做的好處至少有三個:

第一、大大提高效率。儲存過程本身的執行速度非常快,而且,呼叫儲存過程可以大大減少同資料庫的互動次數。
第二、提高安全性。假如將SQL語句混合在ASP程式碼中,一旦程式碼失密,同時也就意味著庫結構失密。
第三、有利於SQL語句的重用。

在ASP中,一般通過command物件呼叫儲存過程,根據不同情況,本文也介紹其它呼叫方法。為了方便說明,根據儲存過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的儲存過程
假設有以下儲存過程(本文的目的不在於講述T-SQL語法,所以儲存過程只給出程式碼,不作說明):

/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on

begin
select * from dbo.[userinfo]
end
go

以上儲存過程取得userinfo表中的所有記錄,返回一個記錄集。通過command物件呼叫該儲存過程的ASP程式碼如下:

'**通過Command物件呼叫儲存過程**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
MyComm.CommandText = "getUserList" '指定儲存過程名
MyComm.CommandType = 4 '表明這是一個儲存過程

MyComm.Prepared = true '要求將SQL命令先行編譯
Set MyRst = MyComm.Execute
Set MyComm = Nothing

儲存過程取得的記錄集賦給MyRst,接下來,可以對MyRst進行操作。
在以上程式碼中,CommandType屬性表明請求的型別,取值及說明如下:
-1 表明CommandText引數的型別無法確定
1 表明CommandText是一般的命令型別
2 表明CommandText引數是一個存在的表名稱
4 表明CommandText引數是一個儲存過程的名稱

還可以通過Connection物件或Recordset物件呼叫儲存過程,方法分別如下:

'**通過Connection物件呼叫儲存過程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr 'MyConStr是資料庫連線字串
Set MyRst = MyConn.Execute("getUserList",0,4) '最後一個參斷含義同CommandType
Set MyConn = Nothing

'**通過Recordset物件呼叫儲存過程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr是資料庫連線字串,最後一個參斷含義與CommandType相同


2. 沒有輸入輸出的儲存過程
請看以下儲存過程:

/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go

該儲存過程刪去userinfo表中的所有記錄,沒有任何輸入及輸出,呼叫方法與上面講過的基本相同,只是不用取得記錄集:

'**通過Command物件呼叫儲存過程**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
MyComm.CommandText = "delUserAll" '指定儲存過程名
MyComm.CommandType = 4 '表明這是一個儲存過程
MyComm.Prepared = true '要求將SQL命令先行編譯
MyComm.Execute '此處不必再取得記錄集
Set MyComm = Nothing 

當然也可通過Connection物件或Recordset物件呼叫此類儲存過程,不過建立Recordset物件是為了取得記錄集,在沒有返回記錄集的情況下,還是利用Command物件吧。


3. 有返回值的儲存過程
在進行類似SP2的操作時,應充分利用SQL Server強大的事務處理功能,以維護資料的一致性。並且,我們可能需要儲存過程返回執行情況,為此,將SP2修改如下:

/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0 
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end 
return
end
go

以上儲存過程,在delete順利執行時,返回1,否則返回0,並進行回滾操作。為了在ASP中取得返回值,需要利用Parameters集合來宣告引數:

'**呼叫帶有返回值的儲存過程並取得返回值**
DIM MyComm,MyPara
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
MyComm.CommandText = "delUserAll" '指定儲存過程名
MyComm.CommandType = 4 '表明這是一個儲存過程
MyComm.Prepared = true '要求將SQL命令先行編譯
'宣告返回值
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
MyComm.Execute
'取得返回值
DIM retValue
retValue = MyComm(0) '或retValue = MyComm.Parameters(0)
Set MyComm = Nothing

在MyComm.CreateParameter("RETURN",2,4)中,各引數的含義如下:
第一個引數("RETURE")為引數名。引數名可以任意設定,但一般應與儲存過程中宣告的引數名相同。此處是返回值,我習慣上設為"RETURE";
第二個引數(2),表明該引數的資料型別,具體的型別程式碼請參閱ADO參考,以下給出常用的型別程式碼:
adBigInt: 20 ;
adBinary : 128 ; 
adBoolean: 11 ;
adChar: 129 ;
adDBTimeStamp: 135 ;
adEmpty: 0 ;
adInteger: 3 ;
adSmallInt: 2 ; 
adTinyInt: 16 ;
adVarChar: 200 ;
對於返回值,只能取整形,且-1到-99為保留值;
第三個引數(4),表明引數的性質,此處4表明這是一個返回值。此引數取值的說明如下:
0 : 型別無法確定; 1: 輸入引數;2: 輸入引數;3:輸入或輸出引數;4: 返回值

以上給出的ASP程式碼,應該說是完整的程式碼,也即最複雜的程式碼,其實

Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara

可以簡化為

MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)

甚至還可以繼續簡化,稍後會做說明。
對於帶引數的儲存過程,只能使用Command物件呼叫(也有資料說可通過Connection物件或Recordset物件呼叫,但我沒有試成過)。


4. 有輸入引數和輸出引數的儲存過程
返回值其實是一種特殊的輸出引數。在大多數情況下,我們用到的是同時有輸入及輸出引數的儲存過程,比如我們想取得使用者資訊表中,某ID使用者的使用者名稱,這時候,有一個輸入引數----使用者ID,和一個輸出引數----使用者名稱。實現這一功能的儲存過程如下:

/*SP4*/
CREATE PROCEDURE dbo.getUserName
@UserID int,
@UserName varchar(40) output
as
set nocount on
begin
if @UserID is null return
select @UserName=username 
from dbo.[userinfo] 
where [email protected]
return
end
go

呼叫該儲存過程的ASP程式碼如下:

'**呼叫帶有輸入輸出引數的儲存過程**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
MyComm.CommandText = "getUserName" '指定儲存過程名
MyComm.CommandType = 4 '表明這是一個儲存過程
MyComm.Prepared = true '要求將SQL命令先行編譯
'宣告引數
MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)
MyComm.Parameters.append MyComm.CreateParameter("@UserName",200,2,40)
MyComm.Execute
'取得出參
UserName = MyComm(1)
Set MyComm = Nothing

在以上程式碼中,可以看到,與宣告返回值不同,宣告輸入引數時需要5個引數,宣告輸出引數時需要4個引數。宣告輸入引數時5個引數分別為:引數名、引數資料型別、引數型別、資料長度、引數值。宣告輸出引數時,沒有最後一個引數:引數值。
需要特別注意的是:在宣告引數時,順序一定要與儲存過程中定義的順序相同,而且各引數的資料型別、長度也要與儲存過程中定義的相同。
如果儲存過程有多個引數,ASP程式碼會顯得繁瑣,可以使用with命令簡化程式碼:

'**呼叫帶有輸入輸出引數的儲存過程(簡化程式碼)**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
.CommandText = "getUserName" '指定儲存過程名
.CommandType = 4 '表明這是一個儲存過程
.Prepared = true '要求將SQL命令先行編譯
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
.Parameters.append .CreateParameter("@UserName",200,2,40)
.Execute
end with
UserName = MyComm(1)
Set MyComm = Nothing

假如我們要取得ID為1到10,10位使用者的使用者名稱,是不是要建立10次Command物件呢?不是的。如果需要多次呼叫同一儲存過程,只需改變輸入引數,就會得到不同的輸出:

'**多次呼叫同一儲存過程**
DIM MyComm,UserID,UserName
UserName = ""
Set MyComm = Server.CreateObject("ADODB.Command")
for UserID = 1 to 10
with MyComm
.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
.CommandText = "getUserName" '指定儲存過程名
.CommandType = 4 '表明這是一個儲存過程
.Prepared = true '要求將SQL命令先行編譯
if UserID = 1 then
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
.Parameters.append .CreateParameter("@UserName",200,2,40)
.Execute
else
'重新給入參賦值(此時引數值不發生變化的入參以及出參不必重新宣告)
.Parameters("@UserID") = UserID
.Execute
end if
end with
UserName = UserName + MyComm(1) + "," '也許你喜歡用陣列儲存
next
Set MyComm = Nothing

通過以上程式碼可以看出:重複呼叫同一儲存過程時,只需為值發生改變的輸入引數重新賦值即可,這一方法在有多個輸入輸出引數,且每次呼叫時只有一個輸入引數的值發生變化時,可以大大減少程式碼量。


5. 同時具有返回值、輸入引數、輸出引數的儲存過程
前面說過,在呼叫儲存過程時,宣告引數的順序要與儲存過程中定義的順序相同。還有一點要特別注意:如果儲存過程同時具有返回值以及輸入、輸出引數,返回值要最先宣告。
為了演示這種情況下的呼叫方法,我們改善一下上面的例子。還是取得ID為1的使用者的使用者名稱,但是有可能該使用者不存在(該使用者已刪除,而userid是自增長的欄位)。儲存過程根據使用者存在與否,返回不同的值。此時,儲存過程和ASP程式碼如下:

/*SP5*/
CREATE PROCEDURE dbo.getUserName
--為了加深對"順序"的印象,將以下兩引數的定義順序顛倒一下
@UserName varchar(40) output,
@UserID int
as
set nocount on
begin
if @UserID is null return
select @UserName=username 
from dbo.[userinfo] 
where [email protected]
if @@rowcount>0
return 1
else
return 0
return
end
go

'**呼叫同時具有返回值、輸入引數、輸出引數的儲存過程**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
.CommandText = "getUserName" '指定儲存過程名
.CommandType = 4 '表明這是一個儲存過程
.Prepared = true '要求將SQL命令先行編譯
'返回值要最先被宣告
.Parameters.Append .CreateParameter("RETURN",2,4)
'以下兩引數的宣告順序也做相應顛倒
.Parameters.append .CreateParameter("@UserName",200,2,40)
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
.Execute
end with
if MyComm(0) = 1 then
UserName = MyComm(1)
else
UserName = "該使用者不存在"
end if
Set MyComm = Nothing


6. 同時返回引數和記錄集的儲存過程
有時候,我們需要儲存過程同時返回引數和記錄集,比如在利用儲存過程分頁時,要同時返回記錄集以及資料總量等引數。以下給出一個進行分頁處理的儲存過程:

/*SP6*/
CREATE PROCEDURE dbo.getUserList
@iPageCount int OUTPUT, --總頁數
@iPage int, --當前頁號
@iPageSize int --每頁記錄數
as
set nocount on
begin
--建立臨時表 
create table #t (ID int IDENTITY, --自增欄位
userid int,
username varchar(40))
--向臨時表中寫入資料
insert into #t 
select userid,username from dbo.[UserInfo]
order by userid

--取得記錄總數 
declare @iRecordCount int
set @iRecordCount = @@rowcount

--確定總頁數
IF @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)
ELSE
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1

--若請求的頁號大於總頁數,則顯示最後一頁
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount

--確定當前頁的始末記錄
DECLARE @iStart int --start record
DECLARE @iEnd int --end record
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1

--取當前頁記錄 
select * from #t where ID>@iStart and ID<@iEnd

--刪除臨時表
DROP TABLE #t

--返回記錄總數
return @iRecordCount
end
go

在上面的儲存過程中,輸入當前頁號及每頁記錄數,返回當前頁的記錄集,總頁數及記錄總數。為了更具典型性,將記錄總數以返回值的形式返回。以下是呼叫該儲存過程的ASP程式碼(具體的分頁操作略去):

'**呼叫分頁儲存過程**
DIM pagenow,pagesize,pagecount,recordcount
DIM MyComm,MyRst
pagenow = Request("pn")
'自定義函式用於驗證自然數
if CheckNar(pagenow) = false then pagenow = 1
pagesize = 20
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
.CommandText = "getUserList" '指定儲存過程名
.CommandType = 4 '表明這是一個儲存過程
.Prepared = true '要求將SQL命令先行編譯
'返回值(記錄總量) 
.Parameters.Append .CreateParameter("RETURN",2,4)
'出參(總頁數)
.Parameters.Append .CreateParameter("@iPageCount",3,2)
'入參(當前頁號)
.Parameters.append .CreateParameter("@iPage",3,1,4,pagenow)
'入參(每頁記錄數)
.Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)
Set MyRst = .Execute
end with
if MyRst.state = 0 then '未取到資料,MyRst關閉
recordcount = -1
else
MyRst.close '注意:若要取得引數值,需先關閉記錄集物件
recordcount = MyComm(0)
pagecount = MyComm(1)
if cint(pagenow)>=cint(pagecount) then pagenow=pagecount
end if
Set MyComm = Nothing

'以下顯示記錄
if recordcount = 0 then
Response.Write "無記錄"
elseif recordcount > 0 then
MyRst.open
do until MyRst.EOF
......
loop
'以下顯示分頁資訊
......
else 'recordcount=-1
Response.Write "引數錯誤"
end if

對於以上程式碼,只有一點需要說明:同時返回記錄集和引數時,若要取得引數,需先將記錄集關閉,使用記錄集時再將其開啟。


7. 返回多個記錄集的儲存過程
本文最先介紹的是返回記錄集的儲存過程。有時候,需要一個儲存過程返回多個記錄集,在ASP中,如何同時取得這些記錄集呢?為了說明這一問題,在userinfo表中增加兩個欄位:usertel及usermail,並設定只有登入使用者可以檢視這兩項內容。

/*SP7*/
CREATE PROCEDURE dbo.getUserInfo
@userid int,
@checklogin bit
as
set nocount on
begin
if @userid is null or @checklogin is null return
select username
from dbo.[usrinfo]
where [email protected]
--若為登入使用者,取usertel及usermail
if @checklogin=1
select usertel,usermail
from dbo.[userinfo]
where [email protected]
return
end
go

以下是ASP程式碼:

'**呼叫返回多個記錄集的儲存過程**
DIM checklg,UserID,UserName,UserTel,UserMail
DIM MyComm,MyRst
UserID = 1
'checklogin()為自定義函式,判斷訪問者是否登入
checklg = checklogin()
Set MyComm = Server.CreateObject("ADODB.Command")
with MyComm
.ActiveConnection = MyConStr 'MyConStr是資料庫連線字串
.CommandText = "getUserInfo" '指定儲存過程名
.CommandType = 4 '表明這是一個儲存過程
.Prepared = true '要求將SQL命令先行編譯
.Parameters.append .CreateParameter("@userid",3,1,4,UserID)
.Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)
Set MyRst = .Execute
end with
Set MyComm = Nothing

'從第一個記錄集中取值
UserName = MyRst(0)
'從第二個記錄集中取值
if not MyRst is Nothing then
Set MyRst = MyRst.NextRecordset()
UserTel = MyRst(0)
UserMail = MyRst(1)
end if
Set MyRst = Nothing

以上程式碼中,利用Recordset物件的NextRecordset方法,取得了儲存過程返回的多個記錄集。


至此,針對ASP呼叫儲存過程的各種情況,本文已做了較為全面的說明。最後說一下在一個ASP程式中,呼叫多個儲存過程的不同方法。
在一個ASP程式中,呼叫多個儲存過程至少有以下三種方法是可行的:
1. 建立多個Command物件

DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'呼叫儲存過程一
......
Set MyComm = Nothing
Set MyComm = Server.CreateObject("ADODB.Command")
'呼叫儲存過程二
......
Set MyComm = Nothing
......

2. 只建立一個Command物件,結束一次呼叫時,清除其引數

DIM MyComm

相關推薦

ASP呼叫儲存過程語法寫法sql server資料庫,return,output

ASP與儲存過程(Stored Procedures)的文章不少,但是我懷疑作者們是否真正實踐過。我在初學時查閱過大量相關資料,發現其中提供的很多方法實際操作起來並不是那麼回事。對於簡單的應用,這些資料也許是有幫助的,但僅限於此,因為它們根本就是千篇一律,互相抄襲,稍微複雜

在PL/SQL呼叫儲存過程oracle

在oracle10中寫好了儲存過程,程式碼如下: CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int,

oracle呼叫儲存過程

儲存過程的呼叫 增加,修改,刪除的儲存過程呼叫 帶輸入引數的儲存過程呼叫 帶輸出引數的儲存過程的呼叫:此處以登入成功還是失敗為例.返回0 或者1 增加,修改,刪除的儲存過程呼叫

shell呼叫儲存過程

將需要呼叫的儲存過程寫在檔案tasklist.txt中 下面將批量執行檔案列表中的儲存過程 #!/bin/ksh if [ $# -eq 0 ];then echo "no paramer please input one paramer A OR B" exit fi e

oracle 函式呼叫儲存過程

  專案中開發了一個儲存過程來給報表提供資料來源,而程式業務邏輯中需要有一個對該資料來源進行判斷的功能,開始是使用拼接sql的方式在儲存過程中對應sql的外面包裝一層來進行處理,但是覺得這種方式拼接的sql太長,而且以後業務邏輯改變要同時修改儲存過程和程式碼,容易發生遺漏,

CI框架呼叫儲存過程報錯:Commands out of sync; you can't run this command now

專案開發中碰到的問題,資料庫寫了個儲存過程,在ci框架中呼叫此儲存過程,碰到了問題,接觸ci框架時間不長,摸索了好半天,才終於解決。 問題如下: $common = $this->db->query("call welcome_common_data

Java呼叫儲存過程 -- Mybatis

Java中呼叫儲存過程 -- Mybatis public interface XXXMapper { ​ /* * 1.沒有出參(返回值,void) 返回不了值,返回值都封裝在入參的實體類或Map中(引用型別) * 原因:存過的入參、出參都在java呼叫的入參中

在Java呼叫儲存過程(詳細)

本文闡述了怎麼使用DBMS儲存過程。我闡述了使用儲存過程的基本的和高階特性,比如返回ResultSet。本文假設你對DBMS和JDBC已經非常熟悉,也假設你能夠毫無障礙地閱讀其它語言寫成的程式碼(即不是Java的語言),但是,並不要求你有任何儲存過程的程式設計經歷。  儲

ASP使用儲存過程

        學習使用儲存過程(Stored Procedure),是ASP程式設計師的必須課之一。所有的大型資料庫都支援儲存過程,比如Oracle、MS SQL等,(但MS Access不支援,不過,在Access裡可以使用引數化的查詢)。使用儲存過程有許多好處,它可以封裝複雜的資料邏輯,充分發揮大型資料

MyBatis呼叫儲存過程和函式

一.呼叫儲存過程    1.首先在資料庫中定義儲存過程,定義的儲存過程的程式碼如下: //定義儲存過程create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 out varchar2) as begin

在python呼叫儲存過程

儲存過程一般來說在資料庫中直接定義,然後在python中呼叫 新建儲存過程: 執行 結果符合預期,接下來在python呼叫它 import pymysql conn = pymysql.connect(host='127.0.0.1', u

資料庫儲存過程,事務 jfinal呼叫儲存過程,事務

mysql DELIMITER $$ CREATE PROCEDURE `student`.`ceshi`(n INT,j CHAR(1)) BEGIN IF j = 'h' THEN SELECT * FROM blog

java呼叫儲存過程並傳遞list集合引數的方法

sql: CREATE OR REPLACE TYPE test as object( FID NUMBER,  NUM nVARCHAR2(30),  TESKID NUMBER,  CID NUMBER, USERCODE nVARCHAR2(100) ) CREA

C#呼叫儲存過程

1、沒有引數沒有返回值   2、有引數沒有返回值  3、有引數有返回值   下面就這幾種情況分別舉例:1、沒有引數沒有返回值,象這種情況最簡單。 儲存過程 USE Northwind  CREATE PROC novaluenoparameter  AS    SE

asp.net 呼叫儲存過程返回引數和output引數

在日常的軟體開發中 很多的地方都會用到儲存過程 因為儲存過程的安全性和效率是很強的 但是呼叫的時候比如說刪除一條記錄 但是怎麼知道有沒有被刪除呢 這就需要返回引數或者output引數 這裡呼叫資料庫我用的是sqlhelper類 大家可以到網上找一找 這是儲存過程 cr

在SSH專案呼叫儲存過程

一. 建表與初始化資料 create database user create table userInfo ( id int identity(1,1) primary key not null, name varchar(20) not null, age int no

Wcf Ria Services學習筆記(三):WCF RIA Service呼叫儲存過程

            專案中碰到要呼叫儲存過程的情況!但Wcf Ria Service呼叫儲存過程似乎有點麻煩!將碰到的問題簡單做個記錄。 分別以幾個特別的儲存過程為例說明下,Wcf Ria Service中怎麼樣呼叫儲存過程。 (一)帶輸入引數和輸出引數的儲存過程。

.net呼叫儲存過程

摘要:在一個專案的開發中,經常會呼叫資料庫中的儲存過程。可是,幾乎所有儲存過程的呼叫都是同一個模式,主要區別就在於建立的每個引數型別、值等不一樣。那麼,能不能實現通過一個函式(或者類)呼叫所有的儲存過程呢?本文在利用資料庫提供的系統表原理上,實現了統一呼叫的方法,該方法只需

springMVC呼叫儲存過程,entity檔案寫法

<!--廣告任務申請,被稽核通過--> <select id="approveAdTask" statementType="CALLABLE" parameterType="java.util.Map"> {call approveAdTask( #{sn,mod

用分離附加的方式實現sql server資料庫的備份和還原

一、資料庫分離、附加的說明 SQL Server提供了“分離/附加”資料庫、“備份/還原”資料庫、複製資料庫等多種資料庫的備份和恢復方法。這裡介紹一種學習中常用的“分離/附加”方法,類似於大家熟悉的“檔案拷貝”方法,即把資料庫檔案(.MDF)和對應的日誌檔案(.LDF)再拷貝到任何需要恢復這個資料庫的系統磁