#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, если вы все еще застряли. Таким образом вы узнаете больше и избежите некоторых плохих советов, которые иногда даются на этом сайте.