Подключение к базе данных в отдельном методе моего SqlCommand
У меня есть форма, которая проверяет, есть ли значения в базе данных, прежде чем добавлять их. Каждое поле находится в отдельной таблице, и чтобы сохранить все в чистоте, у меня есть checkExists
метод для каждого поля. Есть ли способ иметь отдельный метод, который подключается к базе данных, чтобы мне не пришлось подключаться в каждом методе поля?
Я хотел бы сделать что-то вроде этого, чтобы мой код был менее грязным:
public void SetConnection()
{
SqlConnection myConnection =
new SqlConnection("user id=[username];" +
"password=[password];" +
"server=[server];" +
"database=[db_name];");
try
{
myConnection.Open();
}
catch(Exception e)
{
Console.WriteLine("Unable to Connect");
}
}
public Boolean CheckData_Company(string[] items)
{
Class_DB set_conn = new Class_DB();
try
{
set_conn.SetConnection();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
//check that item does not already exist
string query_string = "SELECT * FROM CR_Company WHERE ([CompanyName] = @companyName";
SqlCommand check_Company = new SqlCommand(query_string, set_conn);
check_Company.Parameters.AddWithValue("@CompanyName", items[0]);
int CompanyExist = (int)check_Company.ExecuteScalar();
if(CompanyExist > 0)
{
return true;
}
else
{
return false;
}
}
Но я получаю
локальная переменная set_conn
Аргумент 2: невозможно преобразовать из Class_DB в System.Data.SqlClient.SqlConnection
Я понимаю ошибку, так что я могу сделать, чтобы вернуть правильное значение, или я должен установить соединение в моем CheckData_Comany()
метод?
1 ответ
Ваш метод SetConnection
должен возвращаться SqlConnection
назад как:
public SqlConnection SetConnection()
{
SqlConnection myConnection = new SqlConnection("user id=[username];" +
"password=[password];" +
"server=[server];" +
"database=[db_name];");
try
{
myConnection.Open();
}
catch(Exception e)
{
Console.WriteLine("Unable to Connect");
}
return myConnection;
}
и тогда вы можете получить что-то вроде:
SqlConnection connection = set_conn.SetConnection();
а затем передать его в SqlCommand
конструктор как параметр:
SqlCommand check_Company = new SqlCommand(query_string, connection);
Ваша полная реализация метода станет:
public Boolean CheckData_Company(string[] items)
{
bool Exists = false;
Class_DB set_conn = new Class_DB();
SqlConnection connection = null;
try
{
connection = set_conn.SetConnection();
//check that item does not already exist
string query_string = "SELECT * FROM CR_Company WHERE ([CompanyName] = @companyName";
SqlCommand check_Company = new SqlCommand(query_string, set_conn);
check_Company.Parameters.AddWithValue("@CompanyName", items[0]);
int CompanyExist = (int)check_Company.ExecuteScalar();
if(CompanyExist > 0)
Exists = true;
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
connection.Close();
}
return Exists;
}
и важно отметить, что не забудьте окончательно закрыть соединение, позвонив connection.Close()
иначе это может привести к поглощению ресурсов, что не должно произойти, когда мы закончим с запросом к базе данных, и мы должны высвободить занятые ресурсы.