2009-08-02 10 views
4

ASP.NET/C#Webアプリケーションからストアドプロシージャにアクセスしようとしています。C#からSQL Server 2008のストアドプロシージャにアクセスするには良い方法

これを行う特別な方法はありますか(パラメータを渡すのにも良い方法です)。

私は、次の手順に従って、あなたは、文字列(非デバッグ可能)のような手順を入力すると、絶対に、アプローチを好きではない:http://www.c-sharpcorner.com/UploadFile/dclark/InsOutsinCS11302005072332AM/InsOutsinCS.aspx

+0

あなたはその記事を慎重に読んでいませんでした。手続きを文字列として入力するのではなく、その名前のみを入力します。 –

答えて

6

LinqToSQLを使用していた場合、ScottGUはいくつかの素晴らしいblog postsを対象にしています。

0

最良の方法は、SQLまたはADO.NETエンティティへのLINQを使用することです。 Visual Studioは、ストアドプロシージャに対応する強く型付けされたメソッドを生成します。

+0

これを達成するためのアプローチやハウツー、チュートリアルはありますか? –

1

私はSubSonicが好きです。 SubSonicはデータベーススキーマに基づいてDALを生成します。ほとんどの人々は、データベースで作業するために生成されたSubSonicオブジェクトをactiverecordまたはsimplerepositoryパターンとともに使用しますが、Subsonicはストアドプロシージャとビューをラップするための強力な型付きのメソッドも生成します。

それはかなり基本的な例ですが、次のようなストアドプロシージャ呼び出しすることができます

:上記のコードで

SubSonic.StoredProcedure sp = Dal.StoredProcedures.UpdatePassword(id, pw); 
DataSet ds = sp.GetDataSet(); 

は、StoredProceduresクラスはUpdatePasswordストアドプロシージャの強く型付けされた方法を含み、 。それは私にとって素晴らしい作品です。

SQLやEntity FrameworkのにLINQを使用してSubSonic Docs are here.

1

は確かにあなたに素敵なを与えるん強くあなたのパラメータと結果へのアクセスを入力したが、あなたはそれらのいずれかを使用する前に行うべき検討事項がたくさんあります。 LINQ to SQLは使い終わっており、Entity Frameworkは.NET Framework 4.0で大幅なオーバーホールを受けるでしょう。それは、コードのかなりだ、

void CallMyStoredProcedure(string connectionString, string paramValue) 
{ 
    string spName = "MyStoredProcedure"; 
    string columnValue; 

    using (SqlConnection conn = new SqlConnection(connectionString)) 
    using (SqlCommand cmd = new SqlCommand(spName, conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

     // Set parameter values 
     cmd.Parameters.AddWithValue("@inputParam", 
      (object)paramValue ?? DBNull.Value); 

     // Parameter to store return value of your SP 
     SqlParameter returnParam = cmd.Parameters.Add(
      new SqlParameter("RETURN_VALUE", SqlDbType.Int)); 
     returnParam.Direction = ParameterDirection.ReturnValue; 

     // Execute SP and read results 
     conn.Open(); 
     using (SqlDataReader dr = cmd.ExecuteReader()) 
     { 
      // Do something with return value 
      int? returnValue = cmd.Parameters["RETURN_VALUE"].Value as int?; 

      while (dr.Read()) 
      { 
       // Suggested way to read results if you use 
       // "SELECT * FROM" in your SP. If you return columns 
       // in a fixed order, it's fairly safe to be reading 
       // in that order without looping 
       for (int field = 0; field < dr.FieldCount; field++) 
       { 
        switch (dr.GetName(field)) 
        { 
         case "StringColumn": 
          columnValue = dr.GetValue(field) as string; 
          break; 
         default: 
          // Column not recognized by your code. 
          // You might choose to complain about it here. 
          break; 
        } 
       } 
      } 
     } 
    } 
} 

うん、あなたがしたいことがあります。

は、情報に基づいた検討を行うために、私は私がやって物事の低レベルADO.NETの方法を共有したいと思いましたあなたがバニラADO.NETに行きたいなら、いくつかのヘルパーメソッドを書いてください。

関連する問題