當前位置:首頁 » 存儲配置 » asp執行存儲過程

asp執行存儲過程

發布時間: 2025-01-22 07:35:55

⑴ asp 調用oracle存儲過程有返回記錄集時經常是出現未指定錯誤'80004005'

Microsoft JET Database Engine (0x80004005)未指定的錯誤解決1、系統可能沒有注冊msjetoledb40.dll,解決辦法是 點 開始--->運行, 輸入 regsvr32 msjetoledb40.dll, 回車即可;2、資料庫所在文1、系統可能沒有注冊msjetoledb40.dll,解決辦法是 點 開始--->運行, 輸入 regsvr32 msjetoledb40.dll, 回車即可;2、資料庫所在文件夾許可權 打開辦法是:打開我的電腦,然後點菜單上的「文件夾選項」--->查看,然後把「使用簡單文件夾共享(推薦)」前面的鉤去掉,然後點「確認」;接下來回到需要打開許可權的文件夾(資料庫存放的文件夾),右鍵---> 屬性--->安全,然後點「添加」--->"高級"--->立即查找--->然後在下面的地方選擇「everyone」--->確定--->點剛才加入的"everyone",然後在下面的大框編輯everyone許可權為完全控制,保存即可。3、需要打開guest用戶 打開方法:我的電腦--->控制面板--->管理工具---->計算機管理--->本地用戶和組---用戶---找到"guest",雙擊,然後把彈出來的狂上的「帳戶已停用」前的鉤去掉,保存即可。4、temp(臨時文件夾)許可權 打開辦法:windows--->temp,單擊右鍵選擇-屬性,你就會看到一個叫做「安全」的選項,添加一個everyone,許可權設置為完全控制,再將你正在使用windows的用戶也設置為完全控制。試試吧,就這幾個問題

出現錯誤的這個幾率大些
1.查看資料庫連接語句沒有發現錯誤;

2.查看文件夾的許可權已經全部給了everyone;

3.打開資料庫的同時,系統會在臨時文件夾 %SystemRoot%/temp/ 下創建臨時文件,而 %systemRoot%/temp/ 的許可權不夠解決:%SystemRoot%/temp/ 的許可權加上(IUSER_電腦名的讀寫) 此錯是WINDOWS目錄下沒有TEMP文件夾導致出錯,建一個TEMP文件夾後則一切正常.

4.TEMP文件最好也把許可權設置為everyone

⑵ asp.net調用存儲過程返回值問題

你的用法不對,存儲過程的返回值不是用來返回數據的,存儲過程只能返回int,而且這個int的目的是用來表示存儲過程執行狀態的,比如執行成功,執行錯誤等等。你這種情況要用output parameter,比較符合標准。

但其實這不是重點,重點是ExecuteScalar是返回結果集第一行第一列的值,不是return value,你搞錯了。

⑶ 在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的函數返回值那樣;另一種是可以返回多個值,存
儲這些值的變數名稱需要在調用參數中先行指定。
這個例子要處理多種參數,輸入參數,輸出參數,返回記錄集以及一個直接返回值。

網路轉載

⑷ 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;

熱點內容
安卓數據線怎麼接藍牙 發布:2025-01-22 12:07:29 瀏覽:229
扣扣賬號多少次密碼不正確會被封 發布:2025-01-22 12:07:19 瀏覽:400
python是32位還是64位 發布:2025-01-22 11:51:41 瀏覽:894
鈴聲多多緩存文件夾 發布:2025-01-22 11:51:39 瀏覽:724
java按鍵精靈 發布:2025-01-22 11:49:31 瀏覽:81
python配色 發布:2025-01-22 11:46:40 瀏覽:613
安卓如何使用屏幕錄制 發布:2025-01-22 11:46:36 瀏覽:777
phpencoding 發布:2025-01-22 11:46:35 瀏覽:257
安卓235玩什麼 發布:2025-01-22 11:37:40 瀏覽:217
c語言計算個人所得稅 發布:2025-01-22 11:28:49 瀏覽:735