Вы ищете свойства DisplayMember
и ValueMember
.
Кроме того, обычно плохая практика - пытаться управлять своим соединением, как это, поскольку это может привести к утечке соединений. В среде WinForms это не так опасно, как в веб-среде, но об этом нужно знать, особенно если у вас много клиентов WinForms, обращающихся к одной и той же базе данных. Если у вас есть исключение, которое выдается в вашем методе NonQueryEx
из приведенного выше кода и перехватывается на более высоком уровне, ваш SqlConnection
останется открытым.
См .: https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling?redirectedfrom=MSDN
Способ, которым вы хотите выполнять вызовы из вашей базы данных, заключается в том, чтобы обернуть вашу конструкцию объекта SqlConnection
в блок using
:
Пример:
using (var cn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand(...);
cmd.ExecuteNonQuery();
}
Если вы хотите использовать слой абстракции, чтобы уберечь себя от печати, поместите ваш вызов в блок using
внутри этого слоя. Это ошибка № 1, которую я вижу с кодом ADO. Net на новых клиентах (иными словами, это невероятно распространенная ошибка, и пусть эта критика вас не обескураживает). ADO. Net управляет связями за кулисами. Открытие и закрытие соединения фактически не завершает соединение с базой данных, оно освобождает его в пул, поэтому следующий вызов .Open или .Close может повторно использовать это же соединение. Удерживание его дольше необходимого означает, что может потребоваться создание новых соединений. Аналогично, нет никакой гарантии, что ваши экземпляры SqlConnect () будут очищены с помощью. Net, поэтому, если у вас есть повторяющееся исключение, перехваченное на более высоком уровне, это может привести к тому, что несколько соединений ожидают освобождения, пока ваш SqlConnect Класс мусора.