如何修复每次asp.net都返回true的布尔方法

时间:2014-01-29 13:13:17

标签: c# sql-server methods sqlclient

我设计了我的网页来读取数据字符串,然后在html表格中的标签上显示结果。我试图突出显示我的数据库作为当前订单读取的行。我唯一的问题是只有一个记录被设置为活动但它们都突出显示它们是活动的。我使用数组来设置我的数据,我也使用标签来获取我需要的ID(所有这些都在下面的代码中)。我已经发布了我的方法以及我在asp页面加载中使用它的位置。如何修复我的方法才能正确返回?

在页面加载

中实现该方法
if (lineData.IsCurrentOrderFind(L68.Text))
{
    myTable.Rows[1].Cells[0].BgColor = "#FE2E2E";
    myTable.Rows[1].Cells[1].BgColor = "#FE2E2E";
    myTable.Rows[1].Cells[2].BgColor = "#FE2E2E";
    myTable.Rows[1].Cells[3].BgColor = "#FE2E2E";
    myTable.Rows[1].Cells[4].BgColor = "#FE2E2E";
}

以下是上面的标签传递给

的方法
public bool IsCurrentOrderFind(string itemNumber)
    {

        StringBuilder sqlString = new StringBuilder();
        sqlString.Append("SELECT * ");
        sqlString.Append("FROM WorkOrder ");
        sqlString.Append("WHERE LineNumber = " + ConfigurationManager.AppSettings["Line"] + " AND LineCompleted =  0 AND (ScaleGroup LIKE '%1' OR ScaleGroup LIKE '%3') ");
        sqlString.Append(" AND CaseGenNum6 = @CaseGenNum6");

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

        SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@CaseGenNum6", itemNumber) };

        try
        {
            reader = App_Code.DBHelper.executeQuery(dbConn, sqlString.ToString(), parameters);
            while (reader.Read())
            {
                IsCurrentOrder = (reader["IsCurrentOrder"] != DBNull.Value && !string.IsNullOrEmpty(reader["IsCurrentOrder"].ToString())) ? true : false;
            }
            reader.Close();
            reader.Dispose();
            dbConn.Close();
            dbConn.Dispose();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (dbConn != null)
            {
                try { dbConn.Close(); dbConn.Dispose(); }
                catch { }
            }
            if (reader != null)
            {
                try { reader.Close(); reader.Dispose(); }
                catch { }
            }
        }
        if (IsCurrentOrder == true) I realize this is not necessary
        {
            return true;
        }
        else
        {
            return false;
        }
    }

3 个答案:

答案 0 :(得分:2)

问题可能在于这个表达式:

!string.IsNullOrEmpty(reader["IsCurrentOrder"].ToString())

不要调用ToString(),而只需将其强制转换为字符串:

!string.IsNullOrEmpty((string)reader["IsCurrentOrder"])

可能更好(前一行可能会抛出异常,如果它不是真正的字符串):

!string.IsNullOrEmpty(reader["IsCurrentOrder"] as string)

原因是如果字符串确实为null,则调用ToString()将返回非null 字符串“null”。

答案 1 :(得分:1)

IsCurrentOrder未在本地声明。它似乎在更高的范围内宣布。当您输入此函数时,没有任何内容正在初始化变量(返回false)。所以,它仍处于最后的状态。请尝试使用此代码:

public bool IsCurrentOrderFind(string itemNumber)
{
    bool IsCurrentOrder = false;

    //and the rest of your source code

答案 2 :(得分:0)

IsCurrentOrder = (reader["IsCurrentOrder"] != DBNull.Value && !string.IsNullOrEmpty(reader["IsCurrentOrder"].ToString())) ? true : false;
        }

实际上并没有检查字段的值,只是它不是空或空。

尝试

if(
(reader["IsCurrentOrder"] != DBNull.Value 
&& 
!string.IsNullOrEmpty(reader["IsCurrentOrder"].ToString())) 
)
{
    IsCurrentOrder = reader["IsCurrentOrder"];
}
else
IsCurrentOrder = false;

我认为你可以对这个方法做很多重构,虽然这会简化逻辑。