C# 在mysqlcommand的separate方法中连接到数据库
我有一个表单,在添加值之前检查值是否在数据库中。每个字段都在不同的表中,为了保持所有内容的整洁,我为每个字段提供了一个C# 在mysqlcommand的separate方法中连接到数据库,c#,database-connection,return-value,sqlclient,C#,Database Connection,Return Value,Sqlclient,我有一个表单,在添加值之前检查值是否在数据库中。每个字段都在不同的表中,为了保持所有内容的整洁,我为每个字段提供了一个checkExists方法。有没有一种方法可以让一个单独的方法连接到数据库,这样我就不必在每个字段中连接方法 我想这样做,这样我的代码就不会那么混乱了: public void SetConnection() { SqlConnection myConnection = new SqlConnection("user id=[username];" +
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;
}
}
但是我有一个
局部变量集连接参数2:无法从类_DB转换为System.Data.SqlClient.SqlConnection
我理解错误,那么我该怎么做才能返回正确的值,还是必须在我的
CheckData\u Comany()
方法中建立连接?您的方法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()
,最终关闭连接,否则,它可能会消耗我们查询数据库时不应该发生的资源,我们应该释放占用的资源。您的方法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()
最终关闭连接,否则它可能会消耗我们查询数据库时不应该发生的资源,我们应该释放占用的资源。什么是“myConnection”定义为?@Rand Random,啊,很好的一点,我会在以后的调试中记住你的评论。“myConnection”的定义是什么?@Rand Random,啊,很好的一点,我会在以后的调试中记住你的评论。对不起,我对c#很陌生。如果在finally{conn.close}之前返回,该方法是否会到达finally语句?我一直觉得return语句会结束函数。你应该在方法末尾返回,@Mwspencer相应地更新了谢谢,我想我的逻辑是错的。@Mwspencer那很好bool
是Boolean
的别名,对不起,我对c#很陌生。如果在finally{conn.close}之前返回,该方法是否会到达finally语句?我一直觉得return语句会结束函数。你应该在方法末尾返回,@Mwspencer相应地更新了谢谢,我想我的逻辑是错的。@Mwspencer那很好bool
是Boolean
的别名