2012-10-19 8 views
12

ストアドプロシージャから仮想テーブルを返したいので、C#.netのデータセットで使用します。私の手順は少し複雑で、私の手順を変更するためにされたテーブルを返し、データセットここストアドプロシージャをC#.NetのDataSetに返します。

でそれを設定する方法を見つけることができません。

ALTER PROCEDURE [dbo].[Procedure1] 

    @Start datetime, 
    @Finish datetime, 
    @TimeRange time 
AS 
BEGIN 

    SET NOCOUNT ON; 

    declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime); 

    with TimeRanges as (
    select @Start as StartTime, @Start + @TimeRange as EndTime 
    union all 
    select StartTime + @TimeRange, EndTime + @TimeRange 
    from TimeRanges 
    where StartTime < @Finish) 
    select StartTime, EndTime, Count(Test.ScenarioID) as TotalPeaks 
    from TimeRanges as TR left outer join 
     dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime 
    group by TR.StartTime, TR.EndTime 
END 
+2

設定ファイルに接続文字列のサンプルです:あなたは、コード、XMLまたはデータサンプルを投稿する場合は、** **テキストエディタでこれらの行をハイライト表示してください編集ツールバーの "コードサンプル"ボタン( '{}')をクリックすると、フォーマットや構文の強調表示ができます! –

答えて

42

この

DataSet ds = new DataSet("TimeRanges"); 
    using(SqlConnection conn = new SqlConnection("ConnectionString")) 
    {    
      SqlCommand sqlComm = new SqlCommand("Procedure1", conn);    
      sqlComm.Parameters.AddWithValue("@Start", StartTime); 
      sqlComm.Parameters.AddWithValue("@Finish", FinishTime); 
      sqlComm.Parameters.AddWithValue("@TimeRange", TimeRange); 

      sqlComm.CommandType = CommandType.StoredProcedure; 

      SqlDataAdapter da = new SqlDataAdapter(); 
      da.SelectCommand = sqlComm; 

      da.Fill(ds); 
    } 
+1

私はこの答えを使用しようとしたときに、私はコマンドタイプを 'CommandType.StoredProcedure'に設定しなければならないということでした。したがって、この 'sqlComm.CommandType = CommandType.StoredProcedure'のようになります。 –

+0

@ Pow-Ianそれを指摘してくれてありがとうございます – codingbiz

+0

問題ありません。私はそれを試してみる前に、私は座って1時間ほどそれを苦労し、[Missing pieceを与えた[MS記事](http://support.microsoft.com/kb/310070)を見つけました。しかし、これは確かそこの道の99.9%を私に持って来ました。素晴らしい答え。 –

9

Iを試してみてくださいあなたの基本的なステップと休息は自分の努力によって決まるはずです。次の手順を実行する必要があります。

  • 接続文字列を作成します。
  • データセットを埋めるSQLデータアダプタ
  • を作成
  • SQLコマンドを作成してSQL接続
  • を作成します。

接続を開いて閉じることを忘れないでください。より多くの下に立つためにこれに従ってくださいlink

+0

答えとして行く私はこれが非常に有用だったとは思わない。特に明記されていない限り、私は人々がジェネリックよりも具体的なものを求めていると感じています。 –

1

グローバルレベルでSqlConnectionインスタンスとSqlCommandインスタンスを宣言して、クラス全体で使用できるようにすることができます。接続文字列はWeb.Configです。

SqlConnection sqlConn = new SqlConnection(WebConfigurationManager.ConnectionStrings["SqlConnector"].ConnectionString); 
SqlCommand sqlcomm = new SqlCommand(); 

今、あなたは、ストアドプロシージャに値を渡すとDataSetを取得するには、以下の方法を使用することができます。

public DataSet GetDataSet(string paramValue) 
{ 
    sqlcomm.Connection = sqlConn; 
    using (sqlConn) 
    { 
     try 
     { 
      using (SqlDataAdapter da = new SqlDataAdapter()) 
      { 
       // This will be your input parameter and its value 
       sqlcomm.Parameters.AddWithValue("@ParameterName", paramValue); 

       // You can retrieve values of `output` variables 
       var returnParam = new SqlParameter 
       { 
        ParameterName = "@Error", 
        Direction = ParameterDirection.Output, 
        Size = 1000 
       }; 
       sqlcomm.Parameters.Add(returnParam); 
       // Name of stored procedure 
       sqlcomm.CommandText = "StoredProcedureName"; 
       da.SelectCommand = sqlcomm; 
       da.SelectCommand.CommandType = CommandType.StoredProcedure; 

       DataSet ds = new DataSet(); 
       da.Fill(ds);        
      } 
     } 
     catch (SQLException ex) 
     { 
      Console.WriteLine("SQL Error: " + ex.Message); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Error: " + e.Message); 
     } 
    } 
    return new DataSet(); 
} 

次のStackOverflowへようこそ

<connectionStrings> 
    <add name="SqlConnector" 
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName;User id=YourUserName;Password=YourPassword" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 
関連する問題