Перестройте свое решение (иногда чистое, а затем лучше работает). Затем посмотрите на свой список ошибок, прокрутите до самого конца, и он, скорее всего, укажет на ошибку, которая не позволяет вашей сборке скомпилироваться, и компилятор XAML, скорее всего, использует кэшированную версию сборки, а не новую, которую вы используете. хочу построить.
Это большая часть. Некоторые дополнительные моменты, которые следует учитывать:
SqlCommand
, ] SqlParameter
, DataSet
, SqlDataAdapter
) и вы хотите подождать как можно дольше, чтобы открыть соединение . Это должно быть учтено в полном шаблоне. .
private static string connectionString = "load from encrypted config file";
private SqlConnection getConnection()
{
return new SqlConnection(connectionString);
}
А затем напишите свой пример следующим образом:
using (SqlConnection sqlConn = getConnection())
{
// create command and add parameters
// open the connection
sqlConn.Open();
// run the command
}
Этот образец может существовать только в вашем классе доступа к данным. В качестве альтернативы можно отметить его внутренним
и распределить уровень данных по всей сборке. Главное - строгое соблюдение четкого разделения кода вашей базы данных.
Реальная реализация может выглядеть так:
public IEnumerable<IDataRecord> GetSomeData(string filter)
{
string sql = "SELECT * FROM [SomeTable] WHERE [SomeColumn] LIKE @Filter + '%'";
using (SqlConnection cn = getConnection())
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.Parameters.Add("@Filter", SqlDbType.NVarChar, 255).Value = filter;
cn.Open();
using (IDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
yield return (IDataRecord)rdr;
}
}
}
}
Обратите внимание, что я также смог «сложить» создание объектов cn
и cmd
, и таким образом уменьшить вложенность и создать только один блок области видимости.
Наконец, небольшое предостережение об использовании кода yield return
в этом конкретном примере. Если вы вызываете метод и не завершаете свою DataBinding
или другое использование сразу, это может удерживать соединение открытым в течение длительного времени. Примером этого является использование его для установки источника данных в событии Load
страницы ASP.NET. Поскольку фактическое событие привязки данных выиграло '
Библиотеки Microsoft Patterns and Practices - отличный подход к управлению связью с базой данных. Библиотеки инкапсулируют большинство механизмов, связанных с открытием соединения, что, в свою очередь, облегчит вашу жизнь.
Ваше понимание использования является правильным, и этот метод использования является рекомендуемым способом сделать это. Вы также можете вызвать close в своем коде.
Также: Открывать поздно, закрывать рано.
Не открывайте соединение, пока не останется больше шагов перед вызовом базы данных. И закройте соединение, как только закончите.