web-dev-qa-db-ja.com

asp.netでストアドプロシージャを呼び出す

Web.configファイルに接続文字列が定義されている場合、C#コード(指定し忘れて申し訳ありません)からSQLデータベースへの接続を作成してからストアドプロシージャを呼び出すにはどうすればよいですか。その後、このデータを何らかの方法でGridViewのデータソースとして使用したいと思います。

Web.configで接続文字列を定義する方法は次のとおりです。

<connectionStrings>
 <add name="db.Name" connectionString="Data Source=db;Initial Catalog=dbCat;User ID=userId;Password=userPass;" providerName="System.Data.SqlClient" />
 </connectionStrings>

DbサーバーはMicrosoftSQLサーバーです。

これが私が探していたものです:

ConnectionStringSettings conSet = ConfigurationManager.ConnectionStrings["db.Name"];
SqlConnection con = new SqlConnection(conSet.ConnectionString);

データを取得するためのコードはかなり簡単です。 web.configファイルのconnectionString変数からアクセスすることにもっと興味がありました。

9
onit

このようなリソースファイルの場合:

private static readonly string connString = Resource1.connString;

ここで、connStringはキーの名前です。 web.configファイルの場合

そのようなもの:

private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["strConn"];ここで、connはWeb構成ファイルで定義されています。

<add key="strConn" value="User ID=test;Password=test;Initial Catalog=TestDB;Data Source=NameOfServer;"/>

次に、sprocを呼び出します。

  //connString = the string of our database app found in the resource file
                using (SqlConnection con = new SqlConnection(connString))
                {
                    using (SqlCommand cmd = new SqlCommand("EMPDLL_selClientByClientID", con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add("@ClientID", SqlDbType.VarChar).Value = cID;
                        con.Open();

                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            if (reader.HasRows)
                            {
                                if (reader.Read())
                                {
                                       //more code
                                }
                             }
                        }
                     }
                  }

これは、C#、VB.netでコーディングしている場合、同じ取引がもう少し言葉になります:)、ここに小さなサンプルがあります:

 Public Sub DeleteEmployee(ByVal lVID As Long)
        Dim conMyData As SqlConnection
        Dim cmdDelete As SqlCommand

        Try
            conMyData = New SqlConnection(connString)
            cmdDelete = New SqlCommand("delEmployee", conMyData)

            With cmdDelete
                .CommandType = CommandType.StoredProcedure
                'add the parameters
                .Parameters.Add("@LoginID", SqlDbType.BigInt).Value = lVID    'the request
                conMyData.Open()    'open a connection
                .ExecuteNonQuery()  'execute it
            End With

        Catch ex As Exception
            Throw ex
        Finally
            cmdDelete = Nothing
            conMyData.Close()
            conMyData = Nothing
        End Try
    End Sub

もちろん、使用されているリソースを確実にクリーンアップするには、try/catch/finallyの代わりにusingステートメントを使用する必要があります。

7
JonH

このようなもの...

using (var con = new SqlConnection(_connectionString))
{
    using (var cmd = new SqlCommand(_storedProcedureName, con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@pMyParamater", myParamaterValue);
        con.Open();

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                 // do something with the row
            }
        }
    }
}

正直なところ、これはすべて非常に単純なものです。必要なものはすべて ADO.NETドキュメント から見つけることができるはずです。

4