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
的别名