asp調用存儲過程
❶ asp調用存儲過程問題
CreateParameter(Name,Type,Direction,Size,Value)
都是可選參數,
Name 參數名,不需要與存儲過程的對應
Type 數據類型,200是字元串,3是整數,具體可以參考adovbs.inc
Direction 方向,1:輸入 2:輸出 或者 4:返回,默認輸入
Size 數據長度
Value 參數值
-------
'設定Command對象使用的資料庫連接
Set cmd.ActiveConnection=conn
'命令文本,這里是存儲過程名
cmd.CommandText="game_work_fish_get_set_complete"
'命令類型,4是存儲過程,1是文本
cmd.CommandType= 4
'創建並添加一個參數
cmd.Parameters.Append cmd.CreateParameter(...)
'給參數賦值
cmd("@community_id") = 值
cmd.execute ' 執行命令
'將輸出參數的值賦給變數
cmd_level_name = cmd("@level_name")
❷ 請問ASP中如何調用存儲過程
我用的是asp.net,不知道和asp差別大不大,不知道你用什麼綁定數據,這里我用DataGrid。
using System.Data;
using System.Data.sqlclient;
Sqlconnection myConnection = new SqlConnection(這里填寫你的連接字元串);
SqlDataAdapter myAdapter = new SqlDataAdapter("這里填寫你的存儲過程名稱",myConnection);
DataSet myDataSet = new DataSet();
myAdapter.Fill(myDataSet);
DataGrid1.DataSource = myDataSet;
DataGrid1.DataBind();
這樣,用存儲過程查找的結果就會輸出到DataGrid上了
歡迎討論,QQ86881052
❸ asp.net中三層結構中怎樣調用存儲過程
存儲過程??。。
LZ,,存儲過程要在數據持久層調用啊,,,
在頁面裡面指定要調用的函數(該函數寫在BLL層裡面),並傳遞參數,,然後BLL層調用數據持久層的函數操作資料庫(這是簡單三層)。。。如果用了反射機制的話,,在BLL層中就根據參數(一般在web.config裡面配置),調用相應的操作類。。比如說是SQL
SERVER的,就調用SQLSERVERDAL層,然後該層再調用數據持久層操作資料庫。。
反正參數是在頁面裡面指定(調用函數),操作資料庫是在數據持久層。。
❹ ASP調用帶參數存儲過程的幾種方式
1. 這也是最簡單的方法,兩個輸入參數,無返回值:
set connection = server.createobject("adodb.connection")
connection.open someDSN
Connection.Execute "procname varvalue1, varvalue2"
''將所有對象清為nothing,釋放資源
connection.close
set connection = nothing
2. 如果要返回 Recordset 集:
set connection = server.createobject("adodb.connection")
connection.open someDSN
set rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",connection
''將所有對象清為nothing,釋放資源
rs.close
connection.close
set rs = nothing
set connection = nothing
3. 以上兩種方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。
首先說明,返回值有兩種。一種是在存儲過程中直接return一個值,就象C和VB的函數返回值那樣;另一種是可以返回多個值,存
儲這些值的變數名稱需要在調用參數中先行指定。
這個例子要處理多種參數,輸入參數,輸出參數,返回記錄集以及一個直接返回值(夠全了吧?)
存儲過程如下:
use pubs
GO
-- 建立存儲過程
create procere sp_PubsTest
-- 定義三個參數變數,注意第三個,特別標記是用於輸出
@au_lname varchar (20),
@intID int,
@intIDOut int OUTPUT
AS
SELECT @intIDOut = @intID + 1
SELECT *
FROM authors
WHERE au_lname LIKE @au_lname + ''%''
--直接返回一個值
RETURN @intID + 2
調用該存儲過程的asp程序如下:
<%@ Language=VBScript %>
<%
Dim CmdSP
Dim adoRS
Dim adCmdSPStoredProc
Dim adParamReturnValue
Dim adParaminput
Dim adParamOutput
Dim adInteger
Dim iVal
Dim oVal
Dim adoField
Dim adVarChar
『這些值在 VB 中是預定義常量,可以直接調用,但在 VBScript 中沒有預定義
adCmdSPStoredProc = 4
adParamReturnValue = 4
adParaminput = 1
adParamOutput = 2
adInteger = 3
adVarChar = 200
iVal = 5
oVal = 3
''建一個command對象
set CmdSP = Server.CreateObject("ADODB.Command")
''建立連結
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
''定義command 對象調用名稱
CmdSP.CommandText = "sp_PubsTest"
''設置command調用類型是存儲過程 (adCmdSPStoredProc = 4)
CmdSP.CommandType = adCmdSPStoredProc
''往command 對象中加參數
''定義存儲過程有直接返回值,並且是個整數,省缺值是4
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
''定義一個字元型輸入參數
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
''定義一個整型輸入參數
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
''定義一個整型輸出參數
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)
''運行存儲過程,並得到返回記錄集
Set adoRS = CmdSP.Execute
''把每個記錄列印出來,其中的欄位是虛擬的,可以不用管
While Not adoRS.EOF
for each adoField in adoRS.Fields
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Next
Response.Write "<br>"
adoRS.MoveNext
Wend
''列印兩個輸出值:
Response.Write "<p>@intIDOut = 「 & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
''大掃除
Set adoRS = nothing
Set CmdSP.ActiveConnection = nothing
Set CmdSP = nothing
%>
------------------------------------------------------------------------------------------------------------------------------------
在asp中調用sql server的存儲過程可以加快程序運行速度
1.調用存儲過程的一般方法
先假設在sql server中有一存儲過程dt_users:
CREATE PROCEDURE [dbo].[dt_users]
AS
select * from users
return
GO
第一種方法是不利用command對象,直接用recordset對象
set rs=server.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1 這樣就可
第二種方法是利用command對象
set comm=server.createobject("adodb.command")
comm.commantype=4
set comm.activeconnection=conn
comm.commandtext="dbo.dt_users"
set rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2.給存儲過程傳遞參數
如果存儲過程中不用參數,而是單一的sql語句,還顯示不出調用存儲過程的優勢!
比如說一bbs的查詢,可以按作者和主題查詢!則可以建立存儲過程如下:
參數keyword為關鍵字,choose是選擇查詢的方法。
CREATE PROCEDURE [dbo].[dt_bbs]
@keyword varchar(20)=null,
@choose int=null
as
if @choose=1
select * from bbs where name like @keyword
else
select * from bbs where subject like @keyword
return
go
這樣我們調用存儲過程時只需將參數傳遞過去就行了,而省去在asp中來寫一段程序
用第一種方法:
set rs=server.createobject("adodb.recordset")
sql="exec dt_bbs ''"&keyword&"'',"&choose&""
rs.open sql,conn,1,1
用第二種方法:
set comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
set comm.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
set rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.open comm,,1,1
❺ 如何在ASP中調用Oracle的存儲過程求答案
age number(4),
gender char(1)
) 添加一條約束於gender,alter table test
add constraint gender_chk check (gender in ('m','f','M','F')) 並且添加默認值於gender,alter table test
modify (gender default 'm') 添加數據:insert into test values
('刀鋒',21,'m')
insert into test values
('柳飛雪',14,'f') call lzbbs.del('1')
程序包或函數DEL處於無效狀態 begindel('1');end; ERROR 位於第 2 行:
ORA-06550: 第 2 行, 第 1 列:
PLS-00905: 對象 LZBBS.DEL 無效
ORA-06550: 第 2 行, 第 1 列:
PL/SQL: Statement ignored
使用ASP訪問Oracle的存儲過程:set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=conn
'cmd.CommandText="{call jcptdb.IsPermit(?,?,(resultset 1,out1))}"
cmd.parameters.append paracmd(0)="1"cmd.execute OraOLEDB 錯誤'80040e14'ORA-06550: 第 1 行, 第 13 列: PLS-00905: 對象 LZBBS.DEL 無效 ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored/test.asp,行 92
❻ asp.net 調用存儲過程
兩種不同的存儲過程調用方法
為了突出新方法的優點,首先介紹一下在.NET中調用存儲過程的「官方」方法。另外,本文的所有示常式序均工作於SqlServer資料庫上,其它情況類似,以後不再一一說明。本文所有例子均採用C#語言。
要在應用程序中訪問資料庫,一般性的步驟是:首先聲明一個資料庫連接SqlConnection,然後聲明一個資料庫命令SqlCommand,用來執行SQL語句和存儲過程。有了這兩個對象後,就可以根據自己的需要採用不同的執行方式達到目的。需要補充的是,不要忘記在頁面上添加如下的引用語句:using System.Data.SqlClient。
就執行存儲過程來說,如果執行的是第一類存儲過程,那麼就要用一個DataAdapter將結果填充到一個DataSet中,然後就可以使用數據網格控制項將結果呈現在頁面上了;如果執行的是第二和第三種存儲過程,則不需要此過程,只需要根據特定的返回判定操作是否成功完成即可。
(1)執行一個沒有參數的存儲過程的代碼如下:
SqlConnection conn=new SqlConnection(「connectionString」);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere";
da.selectCommand.CommandType = CommandType.StoredProcere;
然後只要選擇適當的方式執行此處過程,用於不同的目的即可。
(2)執行一個有參數的存儲過程的代碼如下(我們可以將調用存儲過程的函數聲明為ExeProcere(string inputdate)):
SqlConnection conn=new SqlConnection(「connectionString」);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere";
da.selectCommand.CommandType = CommandType.StoredProcere;
(以上代碼相同,以下為要添加的代碼)
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
這樣就添加了一個輸入參數。若需要添加輸出參數:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
若要獲得參儲過程的返回值:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
從上面的代碼我們可以看出,當存儲過程比較多或者存儲過程的參數比較多時,這種方法會大大影響開發的速度;另外一方面,如果項目比較大,那麼這些用於資料庫邏輯的函數在以後的維護中也是一個很大的負擔。那麼,有沒有一種改進的方法可以解決這個問題呢?想到在執行沒有參數的存儲過程時只需要傳入一個存儲過程的名字就可以調用相應的存儲過程,而且在SqlServer資料庫中我們可以直接在查詢分析器中敲入「存儲過程名(參數列表)」樣的字元串就可以執行存儲過程,那麼,是否可以把這種思想應用到應用程序中呢?
於是在編譯器中鍵入相應代碼。這些代碼是在調用不帶參數的存儲過程的代碼的基礎上改的。具體代碼如下:
SqlConnection conn=new SqlConnection(「connectionString」);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere('para1','para2',para3)";
da.selectCommand.CommandType = CommandType.StoredProcere;
為了使代碼更具有代表性,要調用的存儲過程的第一個和第二個參數都為字元串類型,第三個參數為整型。執行以後發現,完全可以達到預期的效果!
兩種調用方法的比較
通過比較我們可以看到,第二種方法具有一個很明顯的優點,那就是可以提高開發速度,節省開發時間,而且代碼容易維護,在一定程度上也減少了系統大小。但是,由於對存儲過程參數的處理比較籠統,如果要獲取輸出參數或者得到存儲過程的返回值,這種方法就不能滿足需要了。雖然如此,但是,這種方法畢竟可以讓開發人員少些很大一部分的代碼。如果不需要獲取輸出參數和返回值,那麼幾乎可以做到「一勞永逸」。因此在實際的程序開發中,這種方法還是具有一定的實用價值的。
用ASP.NET與SQL SERVER可是緣份最好了,稍大的程序一般第一先考慮的是SQL SERVER,只是一些很考慮經濟的才使用ACCESS等了。用SQL SERVER,為了使資料庫的效率更好,一般都會才取存儲過程,因存儲過程執行速度快,並且可以實現一些高級的查詢等功能。比如傳入一些數據參數,但執行的SQL過程可能不同等。
下面就來個例子,建立一新的角色,要求角色的名字不能重復,以下是一存儲過程。
CREATE PROCEDURE sp_AccountRole_Create@CategoryID int,@RoleName nvarchar(10),@Description nvarchar(50),@RoleID int outputAS DECLARE @Count int -- 查找是否有相同名稱的記錄 SELECT @Count = Count(RoleID) FROM Account_Role WHERE RoleName = @RoleName IF @Count = 0 INSERT INTO Account_Role (CategoryID, RoleName, Description) valueS (@CategoryID, @RoleName, @Description) SET @RoleID = @@IDENTITY RETURN 1GO 執行存儲過程的C#過程:
SqlConnection DbConnection = new SqlConnection(mConnectionString);SqlCommand command = new SqlCommand( "sp_AccountRole_Create", DbConnection );DbConnection.Open(connectString);// 廢置SqlCommand的屬性為存儲過程command.CommandType = CommandType.StoredProcere;command.Parameters.Add("@CategoryID", SqlDbType.Int, 4);command.Parameters.Add("@RoleName", SqlDbType.NVarChar, 10);command.Parameters.Add("@Description", SqlDbType.NVarChar, 50);command.Parameters.Add("@RoleID", SqlDbType.Int, 4);// 返回值command.Parameters.Add("Returnvalue", SqlDbType.Int, 4, // Size ParameterDirection.Returnvalue, false, // is nullable 0, // byte precision 0, // byte scale string.Empty, DataRowVersion.Default, null );command.parameters["@CategoryID"].value = permission.CategoryID;command.parameters["@RoleName"].value = permission.PermissionName;command.parameters["@Description"].value = permission.Description;// 可以返回新的ID值command.parameters["@RoleID"].Direction = ParameterDirection.Output;int rowsAffected = command.ExecuteNonQuery();int result = command.parameters["Returnvalue"].value;int newID = command.parameters["@RoleID"].value;
❼ ASP.NET調用存儲過程
給你看下我的,用的時候很簡單,和你拼sql差別不是很大,就一個屬性而已Commandtype這個屬性storeprocere就是調用存儲過程,text是sql語句,我的sqlhelper.ExecuteNonQuery的參數, public static int ExecuteNonQuery(string cmmdText, CommandType cmdType, params SqlParameter[] parameters)
{
using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
SqlCommand cmd = PrepareCommand(con, cmmdText, cmdType, parameters);
return cmd.ExecuteNonQuery();
}
}最後一個是參數,如果你的存儲過程有參數,就在這里加,eg:SqlHelper.ExecuteNonQuery("過程名", CommandType.StoredProcere,new SqlParameter("參數名字",值));如果沒有參數,則SqlHelper.ExecuteNonQuery("過程名", CommandType.StoredProcere, null); 不懂的話請繼續說,謝謝採納
❽ asp.net如何調用資料庫的存儲過程
存儲過程是寫好了還是沒寫?
存儲過程的讀取一般是
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);
SqlCommand cmd;
這是個形式
cmd = new SqlCommand("sp_你的過程", con);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.Add(new SqlParameter("@Type", SqlDbType.Int));
cmd.Parameters["@Type"].Value = 1;
cmd.Parameters.Add(new SqlParameter("@YourName", SqlDbType.NVarChar, 40));cmd.Parameters["@YourName"].Value = GoodsName.Text.Trim();
GridView1.DataSource = GetDataSet(你的資料庫操作,作為顯示的源);
GridView1.DataKeyNames = new String[] { "id" };
GridView1.DataBind();
這個是GridView的綁定方法
❾ asp.net裡面如何用三層架構調用存儲過程呢
邏輯層只要把參數傳到數據層就可以了,在數據層里進行資料庫操作
表示層:
MethedBLL
bLL=new
MethedBLL();
bLL.Methed(參數1,參數2);
邏輯層
public
返回類型
Methed(string
參數1,string
參數2)
{
MEthedDAL
dAL=new
MethedDAL();
dAL.Methed(參數1,參數2);
}
數據訪問層
public
返回類型
Methed(string
參數1,string
參數2)
{
sqlconnection
con=new
sqlconnection(連接字元串);
sqlcommand
cmd=new
sqlcommand();
cmd.connection=con;
cmd.commandtext="存儲過程名稱";
cmd.commandtype=commandtype.procere;
cmd.parameters.add(添加參數);
cmd.parameter["參數名"].value=參數1;
...
con.open();
cmd.executenonquery();
con.close();
}
❿ 在asp.net(c#)中如何用sql語句調用伺服器端的存儲過程
如果已知了
伺服器端
有你需要的
存儲過程
,則第一步需要使你的程序和伺服器先建立起連接,連接成功之後可以寫一個
sql語句
:exec
存儲過程名(不帶參的存儲過程)就行了,當然這些可以在你的程序里寫也可以在你的程序里寫語句用來調用完成上述sql語句的存儲過程名即把上面的exec
存儲過程名
封裝在另一個存儲過程里,在程序里通過.net
里的
sqlcommand
和
sqlconnection
類來實現完成上面所述的語句