2013-02-26 162 views
0

讓我詳細解釋我遇到的情況以及我正在尋找的解決方案。 Firstfully,我創建了一個存儲過程,輸出簡單的事情,如表2和消息「不要停在這裏」」使用存儲過程從數據庫檢索數據表

T-SQL:

USE [mydb] 
GO 
/****** Object: StoredProcedure [dbo].[BackupDatabase] Script Date: 2/26/2013 11:29:10 AM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
create PROCEDURE [dbo].[testing] 
AS 
BEGIN 
    select 'A' firstname, 'B' lastname; 

    print 'dont stop here' 

    select 1 final 
END 

到現在爲止,我曾經通過使用datarowcollection類retriew在單一方式的桌子,和我的靜態方法是這樣的:

C#:

public static class DataMan 
    { 
     public static DataRowCollection SelectData(string sql) 
     { 
      SqlDataSource DS = new SqlDataSource(CS, sql); 
      return ((DataView)DS.Select(DataSourceSelectArguments.Empty)).ToTable().Rows; 
     } 
public static string CS = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
} 

,我可以很容易地得到我需要什麼樣的位置,並找到什麼evver行,我想:

DataRowCollection people = Util.SelectData("Select * from students") 

但現在我打算像我上面提到的,以創建一個存儲過程,做財產以後這樣的,對於例如:

**DataTableCollection** people = Util.SelectData("exec dbo.Testing") 

UPDATE:

,所以我可以從我的StoredProcedure找到特定表。

我試圖使用DataTable,DataSet,DataTableCollections但沒有成功。我不能以正確的方式使用它們。

請幫我

謝謝

+0

這是真的可能,或者我只是晃來晃去。順便說一下,「Utils」實際上是「DataMan」類。 – INgeek 2013-02-26 20:19:36

+2

這就是爲什麼我們使用ado.net的sql命令對象的孩子。 – RandomUs1r 2013-02-26 20:28:17

回答

3

雖然它可以在隱藏代碼可以作爲你在這裏說明,在SqlDataSource更通常用於以聲明方式的ASP.NET標記頁。但是,根據您開始的操作,在調用存儲過程時,應將SqlCommandType設置爲StoredProcedure,將過程的名稱提供給SelectCommand,並返回DataReader。反過來,DataReader支持您可以調用以檢索您的過程提供的每個離散結果集的方法NextResult()。下面是一個僞代碼的框架,試圖說明你可能如何利用這個:

// pseudo code 
void stub() 
{ 
    SqlDataSource d = new SqlDataSource(*connection string*); 
    d.DataSourceMode = SqlDataSourceMode.DataReader; 
    d.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; 
    d.SelectCommand = "dbo.Testing"; 
    // set some parameters 
    d.SelectParameters.Add("Parameter1Name","Parameter1Value"); // must be tailored to your proc!! 
    d.SelectParameters.Add("Parameter2Name","Parameter2Value"); // must be tailored to  SqlDataReader r = (SqlDataReader) d.Select(); 

    while (r.HasRows) 
    { 
     while (r.Read()) 
     { 
      // do something with each row 
     } 
     // advance to next result set 
     r.NextResult(); 
    } 

    r.Close(); 
} 
+1

通過將它設置爲'StoredProcedure',你不排除'SelectCommand'的'exec'部分嗎?否則它是多餘的?這就是'SqlCommand'如何工作 - 沒有顯式的'exec'。 – 2013-02-26 20:33:36

+1

這就是我得到*輸入*而不是*閱讀*。接得好!固定。 – 2013-02-26 20:35:34

+0

謝謝,我試過這個,看起來它會工作,唯一的問題是SqlDataReader r不會除了d.Select()類型。 – INgeek 2013-02-26 20:51:46

相關問題