Вызов хранимой процедуры с asp.net - PullRequest
9 голосов
/ 20 октября 2011

Если в моем файле web.config определена строка подключения, как мне создать соединение с базой данных SQL из C # кода (извините, я забыл указать) и затем вызвать хранимую процедуру. Затем я хотел бы в конечном итоге использовать эти данные в качестве источника данных для 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>

Сервер БД является сервером Microsoft SQL.

Вот что я искал:

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

Код для получения данных довольно тривиален. Меня больше интересовал доступ к нему из переменной connectionString в файле web.config.

Ответы [ 2 ]

7 голосов
/ 20 октября 2011

Если это файл ресурса, например, так:

private static readonly string connString = Resource1.connString;

Где connString - имя ключа.Если это web.config файл

Примерно так:

private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["strConn"]; где conn определен в вашем файле веб-конфигурации.

<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

Конечно, выследует использовать оператор using вместо try/catch/finally, чтобы обеспечить очистку используемых ресурсов.

4 голосов
/ 20 октября 2011

Примерно так ...

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

...