日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程

發布時間:2023/12/19 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有多種方法使用 ADO.NET 調用存儲過程并獲得返回值和返回參數,其中包括:
  • 使用 DataSet 對象,在獲得返回值和返回參數之外,還可以收集并使用返回的數據行。
  • 使用 DataReader 對象收集返回的行,遍歷這些行,然后收集返回值和返回參數。
  • 使用 ExecuteScalar 方法返回結果中第一行的第一列的值以及返回值和返回參數。這對于聚合函數特別有用。
  • 使用 ExecuteNonQuery 方法只返回參數和值。任何返回的行都將被丟棄。這對于執行操作查詢特別有用。
本文演示后三種方法,并使用 SqlCommandOleDbCommand 這兩個對象。確保只復制對應于您在使用的托管提供程序的代碼。如果您不確定應該使用哪個托管提供程序,請訪問下面的 Microsoft Developer Network 網站: .NET 數據提供程序
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconadonetproviders.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconadonetproviders.asp) 在本文的每個示例中,這些參數都被添加到 Command 對象的 Parameters 集合中。使用 SqlCommand 對象時,您不必按照任何特定的順序添加參數,但必須保證參數名正確。使用 OleDbCommand 對象時,必須按照正確的順序添加參數,不能按照名稱使用參數。

回到頂端

使用 DataReader 返回行和參數

您可以使用 DataReader 對象返回只讀的僅向前型數據流。DataReader 中所包含的信息可以來自一個存儲過程。本示例使用 DataReader 對象運行帶有輸入和輸出參數的存儲過程,然后遍歷返回記錄,以查看返回參數。
  • 在運行 Microsoft SQL Server 的服務器上創建下面的存儲過程: Create Procedure TestProcedure (@au_idIN varchar (11),@numTitlesOUT Integer OUTPUT ) AS select A.au_fname, A.au_lname, T.title from authors as A join titleauthor as TA on A.au_id=TA.au_id join titles as T on T.title_id=TA.title_id where A.au_id=@au_idIN set @numTitlesOUT = @@Rowcount return (5)
  • 新建一個新的 Visual C# .NET Windows 應用程序項目。
  • SystemSystem.Data 命名空間使用 using 語句,這樣,在后面的代碼中就無需限定這些命名空間中的聲明了。將此代碼添加到"窗體"代碼模塊的頂部。請確保只復制對應于您所選的提供程序的代碼。SQL 客戶端 using System.Data.SqlClient; OLE DB 數據提供程序 using System.Data.OleDb;
  • 用以下代碼替換 private Form_Load 事件中的代碼:SQL 客戶端 SqlConnection PubsConn = new SqlConnection ("Data Source=server;integrated " + "Security=sspi;initial catalog=pubs;"); SqlCommand testCMD = new SqlCommand ("TestProcedure", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add ("RetVal", SqlDbType.Int); RetVal.Direction = ParameterDirection.ReturnValue; SqlParameter IdIn = testCMD.Parameters.Add ("@au_idIN", SqlDbType.VarChar, 11); IdIn.Direction = ParameterDirection.Input; SqlParameter NumTitles = testCMD.Parameters.Add ("@numtitlesout", SqlDbType.VarChar, 11); NumTitles.Direction = ParameterDirection.Output ;IdIn.Value = "213-46-8915"; PubsConn.Open();SqlDataReader myReader = testCMD.ExecuteReader(); Console.WriteLine ("Book Titles for this Author:"); while (myReader.Read()) {Console.WriteLine ("{0}", myReader.GetString (2));}; myReader.Close() ; Console.WriteLine("Number of Rows: " + NumTitles.Value ); Console.WriteLine("Return Value: " + RetVal.Value); OLE DB 數據提供程序 OleDbConnection PubsConn = new OleDbConnection ("Provider=SQLOLEDB;Data Source=server;" + "integrated Security=sspi;initial catalog=pubs;"); OleDbCommand testCMD = new OleDbCommand ("TestProcedure", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue; OleDbParameter IdIn = testCMD.Parameters.Add ("@au_idIN", OleDbType.VarChar, 11); IdIn.Direction = ParameterDirection.Input; OleDbParameter NumTitles = testCMD.Parameters.Add ("@numtitlesout", OleDbType.VarChar, 11); NumTitles.Direction = ParameterDirection.Output;IdIn.Value = "213-46-8915";PubsConn.Open();OleDbDataReader myReader = testCMD.ExecuteReader(); Console.WriteLine ("Book Titles for this Author:"); while (myReader.Read()) {Console.WriteLine ("{0}", myReader.GetString (2));}; myReader.Close() ; Console.WriteLine("Number of Rows: " + NumTitles.Value ); Console.WriteLine("Return Value: " + RetVal.Value);
  • 修改 Connection 對象的連接字符串,以便指向運行 SQL Server 的計算機。
  • 運行上述代碼。注意,DataReader 檢索記錄并返回參數值。可以使用 DataReader 對象的 Read 方法遍歷返回的記錄。

    "輸出"窗口顯示兩本書的標題、返回值 5 和輸出參數,其中包含記錄的數目 (2)。注意,必須關閉代碼中的 DataReader 才能看到參數值。另外還要注意,如果關閉了 DataReader,則不必為了查看返回參數而遍歷所有記錄。
  • 回到頂端

    使用 Command 對象的 ExecuteScalar 方法

    可以使用 Command 對象的 ExecuteScalar 方法檢索參數值。另外,ExecuteScalar 返回該存儲過程的第一行的第一列。這對于聚合函數特別有用,如下例所示。
  • 在運行 SQL Server 的服務器上創建下面的存儲過程: Create Procedure TestProcedure2 (@au_idIN varchar (11) ) As /* set nocount on */ select count (T.title) from authors as A join titleauthor as TA on A.au_id=TA.au_id join titles as T on T.title_id=TA.title_id where A.au_id=@au_idIN Return(5)
  • 新建一個新的 Visual C# .NET Windows 應用程序項目。
  • SystemSystem.Data 命名空間使用 using 語句,這樣,在后面的代碼中就無需限定這些命名空間中的聲明了。將此代碼添加到"窗體"代碼模塊的頂部。請確保只復制對應于您所選的提供程序的代碼。SQL 客戶端 using System.Data.SqlClient; OLE DB 數據提供程序 using System.Data.OleDb;
  • 將下面的代碼添加到 Form_Load 事件:SQL 客戶端 string strCount; SqlConnection PubsConn = new SqlConnection ("Data Source=server;integrated " + "Security=sspi;initial catalog=pubs;"); SqlCommand testCMD = new SqlCommand ("TestProcedure2", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add ("RetVal", SqlDbType.Int); RetVal.Direction = ParameterDirection.ReturnValue; SqlParameter IdIn = testCMD.Parameters.Add ("@au_idIN", SqlDbType.VarChar, 11); IdIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";PubsConn.Open();strCount =testCMD.ExecuteScalar ().ToString() ;Console.WriteLine("Number of Rows: " + strCount ); Console.WriteLine("Return Value: " + RetVal.Value); OLE DB 數據提供程序 string strCount; OleDbConnection PubsConn = new OleDbConnection ("Provider=SQLOLEDB;Data Source=server;" + "integrated Security=sspi;initial catalog=pubs;"); OleDbCommand testCMD = new OleDbCommand ("TestProcedure2", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add ("RetVal", OleDbType.Integer); RetVal.Direction = ParameterDirection.ReturnValue; OleDbParameter IdIn = testCMD.Parameters.Add ("@au_idIN", OleDbType.VarChar, 11); IdIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";PubsConn.Open();strCount = testCMD.ExecuteScalar().ToString() ;Console.WriteLine("Number of Rows: " + strCount); Console.WriteLine("Return Value: " + RetVal.Value);
  • 修改 Connection 對象的連接字符串,以便指向運行 SQL Server 的計算機。
  • 運行上述代碼。注意,Command 對象的 ExecuteScalar 方法將返回參數。ExecuteScalar 還將返回所返回的行集中的第一行第一列的值。因此,intCount 的值是存儲過程的 count 函數的結果。
  • 回到頂端

    使用 Command 對象的 ExecuteNonQuery 方法

    此示例使用 ExecuteNonQuery 方法運行查詢并返回參數值。ExecuteNonQuery 還返回在運行此查詢后受影響的記錄數。但是,ExecuteNonQuery 不從該存儲過程返回任何行或列。

    如果只需要知道更改的行數,那么在使用 INSERT、UPDATE 或 DELETE 語句時,ExecuteNonQuery 方法特別有用。當存儲過程中僅使用 SELECT 語句時,您將收到 -1,因為查詢不會影響任何行。
  • 在運行 SQL Server 的計算機上創建下面的存儲過程: Create Procedure TestProcedure3 (@au_idIN varchar (11),@au_fnam varchar (30) )As /* set nocount on */ Update authors set au_fname = @au_fnam where au_id = @au_idin return (5)
  • 新建一個新的 Visual C# .NET Windows 應用程序項目。
  • SystemSystem.Data 命名空間使用 using 語句,這樣,在后面的代碼中就無需限定這些命名空間中的聲明了。將此代碼添加到"窗體"代碼模塊的頂部。請確保只復制對應于您所選的提供程序的代碼。SQL 客戶端 using System.Data.SqlClient; OLE DB 數據提供程序 using System.Data.OleDb;
  • 用以下代碼替換 Form1 代碼模塊中 private Form1_Load 事件后面的代碼:SQL 客戶端 string strRowAffect; SqlConnection PubsConn = new SqlConnection ("Data Source=server;integrated Security=sspi;" + "initial catalog=pubs;"); SqlCommand testCMD = new SqlCommand ("TestProcedure3", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;SqlParameter RetVal = testCMD.Parameters.Add ("RetVal", SqlDbType.Int); RetVal.Direction = ParameterDirection.ReturnValue; SqlParameter IdIn = testCMD.Parameters.Add ("@au_idIN", SqlDbType.VarChar, 11); IdIn.Direction = ParameterDirection.Input; SqlParameter FnameIn = testCMD.Parameters.Add ("@au_fnam", SqlDbType.VarChar, 30); FnameIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915"; FnameIn.Value = "Marjorie";PubsConn.Open();strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;Console.WriteLine("Number of Rows: " + strRowAffect ); Console.WriteLine("Return Value: " + RetVal.Value); OLE DB 數據提供程序 int intRowAffected; OleDbConnection PubsConn = new OleDbConnection ("Provider=SQLOLEDB;Data Source=server;" + "integrated Security=sspi;initial catalog=pubs;"); OleDbCommand testCMD = new OleDbCommand ("TestProcedure3", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add ("RetVal", OleDbType.Integer); RetVal.Direction = ParameterDirection.ReturnValue; OleDbParameter IdIn = testCMD.Parameters.Add ("@au_idIN", OleDbType.VarChar, 11); IdIn.Direction = ParameterDirection.Input; OleDbParameter FnameIn = testCMD.Parameters.Add("@au_fname", OleDbType.VarChar, 30); FnameIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915"; FnameIn.Value = "Marjorie";PubsConn.Open(); intRowAffected = testCMD.ExecuteNonQuery();Console.WriteLine("Number of Rows affected: " + intRowAffected); Console.WriteLine(RetVal.Value);
  • 修改 Connection 對象的連接字符串,以便指向運行 SQL Server 的計算機。
  • 運行上述代碼。"輸出"窗口顯示受影響的行數 (intRowAffect) 和返回參數的值。
  • 回到頂端

    參考

    有關其他信息,請訪問下面的 MSDN 網站: .NET Framework 類庫簡介http://msdn.microsoft.com/library/defa...

    有關其他信息,請訪問下面的 MSDN 網站: .NET Framework 類庫簡介
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconthenetframeworkclasslibrary.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconthenetframeworkclasslibrary.asp)

    使用 DataReader 檢索數據
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontheadonetdatareader.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontheadonetdatareader.asp)

    轉載于:https://www.cnblogs.com/vibratea/archive/2009/07/27/1531885.html

    總結

    以上是生活随笔為你收集整理的如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。