Вызов хранимой процедуры с asp.net

#asp.net #sql-server #stored-procedures #web-config #connection-string

#asp.net #sql-сервер #хранимые процедуры #web-config #строка подключения

Вопрос:

Если у меня есть строка подключения, определенная в моем файле 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 server.

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

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

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

Комментарии:

1. Используете ли вы vb.net или C # ? (Просто чтобы помочь вам с синтаксисом).

Ответ №1:

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

private static readonly string connString = Resource1.connString;

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

Что-то вроде этого:

private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["strConn"]; где conn определен в вашем файле web config .

 <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 того, чтобы убедиться, что вы очищаете используемые ресурсы.

Комментарии:

1. Я не хочу добавлять ключ в свой web.config (в противном случае мне придется редактировать несколько файлов web.config) или вводить его как статическую переменную. Можно ли получить доступ к строке подключения, если она определена в моем web.config, как в моем сообщении.

2. @onit, который находится внутри файла веб-конфигурации.

3. @onit — если вам нужен именно этот конкретный раздел, вы можете сделать _SQLDBConnString = System.Configuration.ConfigurationManager.ConnectionStrings(1).ConnectionString() и использовать свойство ConnectionStrings, а appsettings не section .

4. @onit — если вам не нужны настройки приложения, используйте свойство строки подключения: string test = ConfigurationManager.ConnectionStrings[0].ConnectionString;

5. @JonH это не сработает… Не удалось запросить настройки приложения, если вы пытаетесь использовать ConfigurationManager.AppSettings(), он должен идти следующим образом ConfigurationManager.AppSettings[]

Ответ №2:

Что-то вроде этого…

 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 документация

Комментарии:

1. Подтвердите, если вы знаете тип, почему var ?

2. Я понимаю, что это не сложный материал. Мне просто было интересно, может ли кто-нибудь указать мне правильное направление, поскольку я буквально только начал программировать .NET.

3. @onit Да, я понимаю, что это не было критикой. Если вы новичок в чем-то, полезно привыкнуть читать документацию в качестве первого пункта. Затем задайте более конкретный вопрос о SO, если вы все еще застряли. Таким образом вы узнаете больше и избежите некоторых плохих советов, которые иногда даются на этом сайте.