C#存儲過程 傳入參數 傳出參數 結果集


作者:卞功鑫 轉載請保留:http://www.cnblogs.com/BinBinGo/p/6400928.html 

 

//1   連接字符串
            string connectionString
                = "server=127.0.0.1;integrated security=true;database=MSPetShop4";
            // = "server=.;uid=sa;pwd=SQL@5;database=AdventureWorks2012";
            // = "server=.;user id=sa;password=SQL@5;database=AdventureWorks2012";
            //2 實例化數據庫連接
            using(System.Data.SqlClient.SqlConnection connection = new SqlConnection(connectionString))
            {
                //定義執行SQL語句,可以為select查詢,也可以為存儲過程,我們要的只是返回的結果集.
                string sql = "p_proc_name";

                //SqlCommand 表示數據庫要執行的sql命令
                System.Data.SqlClient.SqlCommand command = new SqlCommand(sql, connection);
                //告知數據庫現在要執行的是存儲過程
                //默認為標准SQL語句,可以不用設置.
                command.CommandType = CommandType.StoredProcedure;

                //提供存儲過程參數(傳入參數) 這里的名稱@pin和存儲過程中的保持一致
                System.Data.SqlClient.SqlParameter pin = new SqlParameter("@pin", System.Data.SqlDbType.Int);
                //參數賦值
                pin.Value = 10;
                //將上面的參數加入command中
                command.Parameters.Add(pin);
               //表值參數
               System.Data.SqlClient.SqlParameter pids = new SqlParameter("@ids", ids); //ids 為datatable
               pids.SqlDbType = SqlDbType.Structured;
               pids.TypeName = "dbo.EntityIdCollection";//EntityIdcollection 為自定義類別 
               command.Parameters.Add(pids);


//提供存儲過程參數(傳出參數)這里的名稱@pout和存儲過程中的保持一致 System.Data.SqlClient.SqlParameter pout = new SqlParameter("@pout", System.Data.SqlDbType.Int); //聲明為傳出參數 Direction 參數方向 ,默認為傳入參數 ParameterDirection.Input pout.Direction = ParameterDirection.Output; //將上面的參數加入command中 command.Parameters.Add(pout); //return 參數 名稱@returnValue隨便取,類型固定為int類型. System.Data.SqlClient.SqlParameter preturn = new SqlParameter("@returnValue",System.Data.SqlDbType.Int); //聲明為傳出參數 Direction 參數方向 ,默認為傳入參數 ParameterDirection.Input preturn.Direction = ParameterDirection.ReturnValue; //return 在存儲過程中隱藏的,但是在C#時要顯式使用 command.Parameters.Add(preturn); //強大的SqlDataAdapter //可以使用 SqlDataAdapter(command) 屬性實體化,也可以使用SqlDataAdapter(sql,connection)實例化. //SqlDataAdapter(command) 主要用於存儲過程 //SqlDataAdapter(sql,connection) 主要用於select語句 System.Data.SqlClient.SqlDataAdapter adapter = new SqlDataAdapter(command); //用於接收adapter.Fill 返回的結果集 DataSet ds = new DataSet(); //返回集插入到 dataset ds 中 adapter.Fill(ds); //現在得到了三個東西 //一 存儲過程的返回結果集 dataset //二 存儲過程的 output 傳出參數值 //三 存儲過程的 return 值 int outputValue = (int)pout.Value; int returnValue = (int)preturn.Value; Console.WriteLine("返回了{0}個DataTable;outputValue 的值為{1};returnValue 的值為{2}", ds.Tables.Count,outputValue,returnValue); } Console.ReadLine();

 

存儲過程

 

ALTER PROC p_proc_name
    (
      @pin INT ,
      @pout INT OUTPUT
    )
AS --------執行用戶自定義邏輯--------------




---------返回結果集 1----------------------

    SELECT  客戶 ,
            產品 ,
            數量 ,
            金額 ,
            年齡
    FROM    dbo.A

-----------返回結果集 2--------------------

    SELECT  客戶 ,
            產品 ,
            數量 ,
            金額 ,
            年齡
    FROM    dbo.A
    WHERE   年齡 IS NOT NULL


  -----------設置output參數值-------------------  
  
    SET @pout = @pin * 100;

--------------returnw值-------------
               
    IF ( @pin <= 0 )
                 --return 如果沒有寫,其值默認為0 ,表示執行成功.
        RETURN -1;
                 --return 之后的語句不執行.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM