Состояние SqlConnection всегда закрывается при выполнении
Я пытаюсь сделать простое подключение к базе данных MS Access с помощью объектов SqlConnection
и SqlCommand
.
Как вы можете видеть, вот как я устанавливаю связь:
private SqlConnection GetConnection()
{
String connStr = ConfigurationManager.ConnectionStrings[0].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
return conn;
}
И прежде чем вы спросите, да, я попытался переместить этот фрагмент кода в метод, который его вызывает. Ничего не изменилось. Он по-прежнему считывает строку подключения неправильно.
Строка подключения выглядит следующим образом и находится в файле App.config
:
<add name="ConnString" connectionString="Server=*.*.*.*;Database=familie;User Id=mfs;Password=********;"/>
Но когда я получу это Ошибка:
И посмотрите на объект строки соединения в то время, строка выглядит следующим образом:
"data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
Я потратил около 2 часов, пытаясь сделать эту работу, заходя на множество различных сайтов, чтобы выяснить, что я сделал неправильно, но я либо получаю информацию, которая слишком стара, конфликтует или имеет дело с подключением к локальной базе данных, когда это на самом деле внешний доступ через прокси, который был предоставлен мне моим клиентом (TrustGate, если кто-то должен это сделать). спросите)
Метод, вызывающий GetConnection()
, выглядит следующим образом:
public Dictionary<int,String> GetPostNrList()
{
SqlConnection conn = GetConnection();
SqlCommand cmd = new SqlCommand("Execute dbo.HENT_POST_NR_LISTE", conn);
var reader = cmd.ExecuteReader();
Dictionary<int, String> liste = new Dictionary<int, string>();
while (reader.NextResult())
{
int post_nr = (int) reader.GetSqlInt32(0);
String by = reader.GetString(1);
liste.Add(post_nr, by);
}
CloseConnection(conn);
return liste;
}
Что именно я делаю не так?
1 ответ:
Сообщение об исключении сообщает вам точно, в чем проблема - ваше соединение не открыто. Вам просто нужно открыть соединение перед выполнением команды:
conn.Open();
Кстати, хорошим примером является использование блока
using
при работе с SQL-соединениями, чтобы убедиться, что он правильно расположен:using (var conn = GetConnection()) { using (var comm = xxxxxxx) { conn.Open(); using (var rdr = comm.ExecuteReader()) { // xxxxx } } }
Вам не нужно ничего специально закрывать - шаблон
using
делает все это за вас.