做者:卞功鑫 轉載請保留:http://www.cnblogs.com/BinBinGo/p/6400928.html 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();
存儲過程sql
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 以後的語句不執行.