1

我一直在尝试将一个 INT 从我的 SQL-Server DB 加载到我的 C# 应用程序中并将其转换为字符串。

基本上,它是我想用作字符串的数据库表的 ID/主键。这就是我所做的:

string Variable_ID;
Variable_ID = HandleDBNull(reader, "ID");

我得到一个 IndexOutOfRange 异常。

这是 HandleDBNull 函数:

    private string HandleDBNull(SqlDataReader r, string columnName)
    {
        if (!r.IsDBNull(r.GetOrdinal(columnName)))
            return r[columnName].ToString();
        else 
            return String.Empty;
    }

它适用于字符串列,因此转换似乎有问题。我已经尝试过 Convert.ToString 并得到了同样的错误。

有任何想法吗?

4

3 回答 3

3

我猜你columnNamecolumnOrder彼此格格不入。一个是错误的。因为它们表达了相同的信息,所以一个是多余的。我会改用:

// probably should be renamed, btw
private string isDBNull(SqlDataReader r, int columnOrder)
{
    if (!r.IsDBNull(columnOrder))
    {
        return r[columnOrder].ToString();
    }
    else return "";
}

显然有:

Variable_ID = isDBNull(reader, 0);

虽然我不太确定我是否希望所有内容都作为字符串。

于 2012-10-04T09:38:08.113 回答
2

您可以尝试 - 因为您的条件基于 columnOrder

 ... 
 return r[columnOrder].ToString();

建议

private bool isDBNull(SqlDataReader r, string columnName, int columnOrder)
    {
        if (!r.IsDBNull(columnOrder))
        {
            return true;
        }
        return false;
    }
于 2012-10-04T09:36:35.090 回答
1

简化代码:

string Variable_ID;
Variable_ID = isDBNull(reader, "ID");

private string isDBNull(SqlDataReader r, string columnName)
{
    if (!r.IsDBNull(r.GetOrdinal(columnName)))
        return r[columnName].ToString();
    else 
        return string.Empty;
}
于 2012-10-04T09:38:30.687 回答