ADO & ADO.NET中使用儲存過程的兩個共用的函式 (轉)
在ADO環境下,過程查詢資料時常規做法為:
1 建立Connection Command
2 開啟連線,給Command賦引數的名稱、資料型別、值
3 Command物件
4 返回給Recordset物件交給客戶端
這樣做每呼叫一次儲存過程都要按照儲存過程中的引數的資料型別建立Parameters物件
比如儲存過程需要兩個引數 @ID int、@Name varchar(10)就需要
‘建立引數
cmd.Parameters.Append cmd.CreateParameter("@ID",adInteger,adParamInput,4)
cmd.Parameters.Append cmd.CreateParameter("@Name",adVarChar,adParamInput,10)
‘給引數賦值
cmd("@State") = 1
cmd("@WhereT")=”2”
每呼叫一個儲存過程都要手工新增這個儲存過程的所有引數,用自己的腦力保證引數的資料型別和儲存過程中的引數的資訊的一致性。
Command.Parameters物件有一個Refresh方法,這個方法的作用時讀取當前Command物件需要的所有引數的名稱和資料型別,用這個方法就可以寫成一個呼叫所有儲存過程的共用,現面這個函式完成了一個返回結果集的儲存過程的通用函式。很簡單可以根據需要細化。
‘在VisualBasic6.0透過。
Function GetRsByPro(strConnString As String, strProName As String, arjParameter() As String)
' 返回 查詢的記錄集
' strConnString 資料連線串
' strProName 儲存過程名
' arjParameter() 儲存過程需要的陣列
On Error GoTo errMsg
'建立ADO物件
Dim Cmd As New Command
' Con = Server.Create("ADO.Connection")
Dim Con As New Connection
' ASP Set Cmd = Server.CreateObject("ADODB.Command")
Dim Rs As New Recordset
' ASP Set rs = Server.CreateObject("ADODB.Recordset")
'開啟
Con.Open strConnString
Set Cmd.ActiveConnection = Con
Cmd.Commandtype = adCmdStoredProc
Cmd.Parameters.Refresh
If UBound(arjParameter) <> Cmd.Parameters.Count Then
De.Print "引數個數不對"
Exit Function
End If
'給儲存過程引數賦值
For i = 0 To Cmd.Parameters.Count - 1
Cmd.Parameters(i).Value = arjParameter(i)
Next
'設定Recordset物件
Rs.CursorType = 3
Rs.LockType = 3
Rs.CursorLocation = 3
Set Rs. = Cmd
Rs.Open
'返回結果集
Set GetRsByPro = Rs
'關閉資料來源
Con.Close
Set Con = Nothing
errMsg:
Debug.Print Err.Description
End Function
‘呼叫Demo
Dim Rs As New Recordset
StrConnString=””
StrProName=”pro_GetAllUser”
Dim arjParameter(1)
arjParameter(0)=”1”
arjParameter(1)=”山東”
Set Rs= GetRsByPro(strConnString, strProName, arjParameter())
用相同的方法在開發環境裡也可以建立一個通用的方法呼叫儲存過程。
在裡不管是OleDbCommand.Parameters物件還是Command.Parameters物件都沒有Refresh方法讀取儲存過程的引數資訊,.NET在OleDbCommandBuilder類裡提供了一個DeriveParameters靜態方法可以實現相同的功能。
.NET SDK裡關於DeriveParameters的描述
“使用在 SqlCommand 中指定的儲存過程的引數資訊,填充指定的 SqlCommand 物件的 Parameters 集合。”
SqlConnection Conn=new SqlConnection(cnString);
Conn.Open();
SqlCommand Comm=new SqlCommand();
Comm.Connection =conn;
Comm.CommandType =CommandType.StoredProcedure ;
Comm.CommandText =proName;
SqlCommandBuilder.DeriveParameters(comm);
//經過這個方法後SqlCommand物件的SqlParameters物件已經幫定了儲存過程中的資訊了
實現執行任意一個儲存過程返回一個DataSet物件的具體函式程式碼
名 :TestSqlAccess.cs
// 在vs.net除錯透過
using System;
using System.Data;
using System.;
using System.Data.SqlClient;
using System.Data.OleDb ;
using System.Collections;
namespace Erp
{
public sealed class TestSqlAccess
{
#region 獲取儲存過程引數集合
public static SqlParameter [] getParameters(string cnString,string proName)
{
SqlConnection conn=new SqlConnection(cnString);
conn.Open();
SqlCommand comm=new SqlCommand();
comm.Connection =conn;
comm.CommandType =CommandType.StoredProcedure ;
comm.CommandText =proName;
SqlCommandBuilder.DeriveParameters(comm);
SqlParameter [] rm=new SqlParameter[comm.Parameters.Count];
for (int i=0;i
arPrm[i]=new SqlParameter();
arPrm[i].SqlDbType =comm.Parameters[i].SqlDbType ;
arPrm[i].ParameterName=comm.Parameters[i].ParameterName;
arPrm[i].Size =comm.Parameters[i].Size;
}
return arPrm;
}
#endregion
#region 執行Command物件返回DataSet
/////可以呼叫提供的那個SqlHelper類..
#endregion 執行Command物件返回DataSet
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956572/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ADO中sqlserver儲存過程使用 (轉)SQLServer儲存過程
- 使用ADO呼叫儲存過程 (轉)儲存過程
- ADO中sqlserver儲存過程使用SQLServer儲存過程
- C#二十六 使用Ado.Net呼叫儲存過程C#儲存過程
- 使用ADO執行儲存過程 (轉)儲存過程
- 在ADO.NET中使用Oracle儲存程式(轉)Oracle
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- PL/SQL 中的儲存過程與函式SQL儲存過程函式
- mysql儲存過程基本函式(轉)MySql儲存過程函式
- 儲存過程 函式儲存過程函式
- 儲存過程與儲存函式儲存過程儲存函式
- SQL中儲存過程和函式的區別SQL儲存過程函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- 儲存過程與函式儲存過程函式
- php呼叫mysql儲存過程和函式的方法(轉)PHPMySql儲存過程函式
- 【ASP.NET開發】ADO.NET呼叫帶輸出引數的儲存過程ASP.NET儲存過程
- (9)mysql 中的儲存過程和自定義函式MySql儲存過程函式
- 儲存過程和函式的區別儲存過程函式
- 儲存過程的引數可以使用sql的函式儲存過程SQL函式
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程 (即函式)MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- mySql 儲存過程與函式MySql儲存過程函式
- SQL server儲存過程函式SQLServer儲存過程函式
- 匯出系統表中的儲存過程和函式儲存過程函式
- 儲存過程分頁 Ado.Net分頁 EF分頁 滿足90%以上儲存過程
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- mysql儲存函過程和儲存函式都屬於儲存程式MySql儲存函式
- 在Oracle中查詢儲存過程和函式Oracle儲存過程函式
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 儲存過程vs.函式QM儲存過程函式
- ADO.NET中的五個主要物件物件
- 在儲存過程中建立表的兩種方法儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- SQL Server儲存過程中raiserror的使用SQLServer儲存過程AIError
- oracle中取得儲存過程、函式等pl sql原始碼的方法Oracle儲存過程函式SQL原始碼
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- Sqlserver中的儲存過程SQLServer儲存過程