使用类

时间:2015-07-31 12:02:35

标签: c# sql

我是否需要在具有SqlCommand的类中添加我打算使用的所有参数,或者我可以在调用类时传递参数?

在我的类文件(Called DataAccess)中:

public static int SqlGetInt(string queryString)
    {
        int retVal = 0;

        try
        {
            using (SqlConnection cn = GetConnection())
            {
                cn.Open();
                using (SqlTransaction tr = cn.BeginTransaction(IsolationLevel.ReadUncommitted))
                {
                    using (SqlCommand cmd = new SqlCommand(queryString, cn))
                    {
                        cmd.Transaction = tr;

                        using (SqlDataReader rdr = cmd.ExecuteReader())
                        {
                            if (rdr.Read())
                                retVal = GetRdrInt(rdr, 0);
                        }
                    }
                    tr.Commit();
                }
            }
        }

在我的Form1代码中:

string sql = "SELECT ID FROM tbl_employees WHERE username = @username";
        _responsible_id = DataAccess.SqlGetInt(sql);

由于我没有添加参数,因此这个过程失败了。回到我的问题:我可以在调用SqlGetInt()时在Form1文件中添加这些参数,还是需要将它添加到类文件的SqlGetInt()中?

1 个答案:

答案 0 :(得分:0)

查询数据库的通用程序总是很糟糕(我的意见),因为它们缺乏现实世界问题复杂性所需的灵活性。

在您的情况下,您可以将您的程序更改为此类

public static int SqlGetInt(string queryString, List<SqlParameter> parms = null)
{
    int retVal = 0;

    try
    {
        using (SqlConnection cn = GetConnection())
        {
            cn.Open();
            using (SqlTransaction tr = cn.BeginTransaction(IsolationLevel.ReadUncommitted))
            {
                using (SqlCommand cmd = new SqlCommand(queryString, cn))
                {
                    cmd.Transaction = tr;
                    if(parms != null)
                       cmd.Parameters.AddRange(parms.ToArray());

                    using (SqlDataReader rdr = cmd.ExecuteReader())
                    {
                        if (rdr.Read())
                            retVal = GetRdrInt(rdr, 0);
                    }
                }
                tr.Commit();
            }
        }
    }

您为List<SqlParameter>添加参数并将其保留为可选(因此您的现有代码无需更改即可运行)。此列表if为非null可以添加到命令的参数集合中。 当然,在此之后,当您需要参数时,无论何时调用此方法,都需要创建参数列表。

string sql = "SELECT ID FROM tbl_employees WHERE username = @username";
List<SqlParameter> pl = new List<SqlParameter>();
pl.Add(new SqlParameter() 
{
    ParameterName="@username",
    SqlDbType = SqlDbType.NVarChar,
    Value = txtUserName.Text;

};
_responsible_id = DataAccess.SqlGetInt(sql, pl);