當前位置:首頁 » 存儲配置 » net調用存儲過程

net調用存儲過程

發布時間: 2022-11-29 11:06:24

A. .net調用存儲過程實現查詢

sqlConnection conn = WebHelper.getconn();
conn.Open();
SqlCommand cmd = new SqlCommand("p_qry", conn);
cmd.CommandType = CommandType.StoredProcere;
SqlParameter p1 = new SqlParameter("@begin_state", SqlDbType.nvarchar,10);
SqlParameter p2 = new SqlParameter("@end_state", SqlDbType.nvarchar,10);
p1.Value = Textbox1.text;
p2.Value = Textbox2.text;
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adp.Fill(dt);
return dt;

B. 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;

C. .net mvc 怎樣調用 存儲過程詳細點最好有例子

由於問題主要是存儲過程,以下例子的架構會直接點,Controller直接依賴SqlRepository,而未用到依賴注入。。
所以,架構方面千萬不要參考了這個例子。。
費話不多說,先講資料庫。舉例的資料庫(SQLServer 2008)名為TestDB01,僅有的一張表表名為UserInfo,表有皆不可為空的三個欄位,分別為UserID(int),UserName(nvarchar(50)),UserAge(smallint),其有一條記錄為UserID:1,UserName:Lcng,UserAge22。
接下來是寫在資料庫里的存儲過程,如下:
USE [TestDB01]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[myProcere]
@parameter1 int
AS
BEGIN
SET NOCOUNT ON;
SELECT * from [UserInfo] where [UserInfo].UserID = @parameter1
END
希望我復制粘貼時沒有出錯,當然,如果你對存儲過程熟悉的話你會發現我的錯誤,如果有的話。。
存儲過程表達的意思在此就不說了(想你應該熟悉存儲過程),如果需要,請補充問題。。

接下來就是Visual Studio 2010里的工作了。
新建一個空ASP.NET MVC 2項目,我取的項目名是UsingProcereInMVC,往項目里加一個名為Repositories的文件夾,此文件夾用來存放對資料庫的操作的類,一會兒會講,先看Models文件夾。
往Models文件夾里加一個名叫Person的類,Person類如下:
public class Person
{
public string PersonName { get; set; }
public short PersonAge { get; set; }
}
現在回到Repositories文件夾,往這個文件夾里加一個名叫SqlRepository的類,SqlRepository類如下:
public class SqlRepository
{
private List<Person> personList = new List<Person>();

public List<Person> PersonList
{
get
{
return personList;
}
}

public SqlRepository(string connectionString)
{
SqlConnection sqlconn = new SqlConnection(connectionString);

SqlCommand sqlcmd = new SqlCommand("myProcere", sqlconn);
sqlcmd.CommandType = CommandType.StoredProcere;

SqlDataReader rd;

try
{
sqlconn.Open();

sqlcmd.Parameters.Add(new SqlParameter("@parameter1", SqlDbType.Int));
sqlcmd.Parameters["@parameter1"].Value = 1;

rd = sqlcmd.ExecuteReader();

while (rd.Read())
{
personList.Add(new Person { PersonAge = (short)rd[2], PersonName = rd[1].ToString() });
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
sqlconn.Close();
}
}
同樣,希望我的復制粘貼沒有出錯。。
希望對於此類需要講解的只有以下這些內容,如
SqlCommand sqlcmd = new SqlCommand("myProcere", sqlconn);
sqlcmd.CommandType = CommandType.StoredProcere;
如果你用過ASP.NET WebForm,那麼對這兩條中的第一條語句你應該很熟悉,相對於ASP.NET WebForm,SqlCommand sqlcmd = new SqlCommand("myProcere", sqlconn);只是把第一個參數由原來的SQL語句換成了定義在資料庫里的存儲過程的名字;而第二條語句只是告訴sqlcmd它的命令類型而已。
當然,我還要說的是,其實這根本就是在ASP.NET WebForm可以用的用法,只是我把它放到ASP.NET MVC里舉例子了而已。。其實我們完全可以或說應當使用LINQ。。
還有兩條要說的語句是
sqlcmd.Parameters.Add(new SqlParameter("@parameter1",SqlDbType.Int));
sqlcmd.Parameters["@parameter1"].Value = 1;
要說的是@parameter1就是定義存儲過程里的那個參數,這里給這個參數的值為1,它完全可以根據你的需要而變。

接著看Controllers里的HomeController,它唯一的一個action就是Index(),定義如下
public ViewResult Index()
{
SqlRepository sr = new SqlRepository(WebConfigurationManager.ConnectionStrings["connectionString01"].ConnectionString);

return View(sr.PersonList);
}
如果對此有不明之處,請補充問題。。

最後是強類型(類型為List<UsingProcereInMVC.Models.Person>)的名叫Index的View,主要內容如下
<body>
<div>
<% foreach (var v in Model)
{ %>
Name:<%: v.PersonName %><br />
Age: <%: v.PersonAge %><br />
<% } %>
</div>
</body>

如果你按著這個例子做,顯示的結果將會是
Name:Lc
Age: 22
祝你好運(當然,這條是不會顯示的)。。

希望可以幫到你,如果還有疑問,請補充問題。
如果這對你有幫助,請標為最佳答案。

D. ASP.NET要如何調用資料庫的存儲過程

其實調用存儲過程和調用普通的sql語句的過程是一樣的。
1.創建連接字元串string SqlConnectionString="";
2.實例化連接SqlConnection cn = new SqlConnectio(SqlConnectionString);
3.SqlCommand cmd = new SqlCommand("存儲過程的名字", cn);
4.執行命令cmd.cmd.ExecuteNonQuery();(這個方法根據你的存儲過程而定)
應該這樣就OK啦!

E. asp.net 調用存儲過程

如果沒有報錯,那就在頁面調用的開始加個斷點,看看userid;username;departid的值是什麼。然後在資料庫里執行以下存儲過程,把三個值帶進去試一試,因為在資料庫里分析一下會比較直接。

F. .Net程序中說的存儲過程是什麼意思

存儲過程是資料庫的一個概念
打個比方說,存儲過程就相當於一個存在資料庫中的方法,可以有輸入參數(input),輸出參數(output),返回值(return)
比如一個方法
public
string
GetData(int
id,out
int
rowCount)
參數id代表input
參數rowCount代表output,即可當輸入參數,也可當輸出參數
返回值類似
一個簡單的存儲過程:
create
proc
T_GetData
@id
int
input,
//輸入參數
@rowCount
int
output
//可輸入輸出參數
類似於.net中的out
parameter
AS
begin
select
@rowCount
=
sum(rowname)
from
table1
where
id
=
@id
//這里給output參數賦值
return
'測試而已'
//這里返回值
end
GO
就創建了一個存儲過程,可以跟調用方法一樣很簡單的調用它了

G. .net類中如何調用存儲過程

1.在存儲過程實現根據中傳入參數的不同null與否,做修改或刪除等動作。這種SQL語句寫起來比較麻煩。

2.實現多個存儲過程,然後分別寫多個方法重載,如果表多的話系統中存儲過程會變得巨大。

其實如果只是簡單的SQL語句,完全沒必要用存儲過程。。。。

H. asp.net 調用存儲過程

(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)執行一個有參數的存儲過程的代碼如下
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);

I. .net調用存儲過程找不到

cmd.CommandText = sql;
cmd.CommandType = CommandType.StoredProcere;如果語句類型是存儲過程,sql就只能使存儲過程名稱,
cmd.CommandText ='exec Room_Login zf,zf' 自然不存在名為 'exec Room_Login zf,zf' 的存儲過程,
要麼cmd.CommandText=Room_Login 然後使用SqlParameter傳遞參數 ,或者修改cmd.CommandType=CommandType.Text

J. .net調用存儲過程

頂一個

熱點內容
python字元串函數參數 發布:2025-09-23 09:03:39 瀏覽:475
dz資料庫鏈接 發布:2025-09-23 08:41:46 瀏覽:300
顯卡緩存和顯存的區別 發布:2025-09-23 08:34:00 瀏覽:226
存儲用法 發布:2025-09-23 08:19:47 瀏覽:867
汽車高配置有哪些 發布:2025-09-23 08:16:41 瀏覽:808
趣撲源碼 發布:2025-09-23 07:56:09 瀏覽:409
大佬黑源碼 發布:2025-09-23 07:32:44 瀏覽:152
女朋友的媽嗎ftp 發布:2025-09-23 07:21:46 瀏覽:688
c語言ls 發布:2025-09-23 07:21:08 瀏覽:278
有道編程模式 發布:2025-09-23 07:20:26 瀏覽:932