C#方法返回SQL字符串而不传递任何变量

时间:2014-03-13 20:14:17

标签: c# methods

我正在尝试创建一个运行查询的方法,然后读取它返回的 2 值,然后将它们放在全局变量中,以便我可以在另一个页面中访问它们。我的问题是我应该使用什么方法,因为我有两个要设置的变量。通常我会传递我将使用的变量,但在这种情况下,我不是。这个主要看起来很简单,但我无法想到获得这些价值的方法。我不知道怎么看这个问题来研究它。我已经将代码包含在我迄今为止所尝试的内容中。谢谢你的帮助。

public string getTotals3()
    {
        WorkerData workerData = new WorkerData();

        StringBuilder sqlString = new StringBuilder();
        sqlString.Append("SELECT DISTINCT DataWin8Data, DataWin7Data ");
        sqlString.Append("FROM Data ");
        sqlString.Append("WHERE Number = 4");

        SqlDataReader reader = null;
        SqlConnection dbConn = App_Code.DBHelper.getConnection();

        try
        {
            reader = App_Code.DBHelper.executeQuery(dbConn, sqlString.ToString(), null);
            if (reader != null)
            {
                while (reader.Read())
                {
                    workerData.TotalCases4 = reader["DataWin8Data"] != DBNull.Value ? reader["DataWin8Data"].ToString() : string.Empty;
                    workerData.TotalPercentage4 = reader["DataWin7Data"] != DBNull.Value ? reader["DataWin7Data"].ToString() : string.Empty;
                }
            }
            else
                throw new Exception("No records returned");
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (dbConn != null)
            {
                try { dbConn.Close(); dbConn.Dispose(); }
                catch { }
            }
            if (reader != null)
            {
                try { reader.Close(); reader.Dispose(); }
                catch { }
            }
        }
        return workerData.ToString();
    }

1 个答案:

答案 0 :(得分:1)

不要使用全局变量。返回方法中的值。调用代码应该负责将这些值放在任何需要的地方。我建议阅读Dependency Inversion Principle

public WorkerData GetWorkerData()
{
    ...

    using (SqlDataReader reader = ...)
    {
        if (reader.Read())
        {
            return new WorkerData
                {
                    TotalCases4 = reader["DataWin8Data"] != DBNull.Value ? reader["DataWin8Data"].ToString() : string.Empty,
                    TotalCases3 = workerData.TotalPercentage4 = reader["DataWin7Data"] != DBNull.Value ? reader["DataWin7Data"].ToString() : string.Empty;
                }
        }
    }

    throw new ApplicationException("Could not retrieve worker data.");
}

从您的通话类中,只需使用返回值执行任何操作:

WorkerData workerData = someClass.GetWorkerData();