我一直在尝试将SQL-Server DB中的INT加载到我的C#应用程序中并将其转换为字符串。
基本上,它是我想用作字符串的数据库表的ID /主键。 这就是我的工作:
string Variable_ID;
Variable_ID = HandleDBNull(reader, "ID");
我得到一个IndexOutOfRange异常。
这是HandleDBNullfunction:
private string HandleDBNull(SqlDataReader r, string columnName)
{
if (!r.IsDBNull(r.GetOrdinal(columnName)))
return r[columnName].ToString();
else
return String.Empty;
}
它适用于字符串列,因此转换似乎有问题。我已经尝试过Convert.ToString并得到了同样的错误。
有什么想法吗?
答案 0 :(得分:3)
我猜你的columnName
和columnOrder
与其他人不一致。一个是错的。由于它们表达相同的信息,因此一个是多余的。我会改用:
// 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);
虽然我不是相当确定我想要一切都是字符串。
答案 1 :(得分:2)
您可以尝试 - 因为您的条件基于columnOrder
...
return r[columnOrder].ToString();
建议
private bool isDBNull(SqlDataReader r, string columnName, int columnOrder)
{
if (!r.IsDBNull(columnOrder))
{
return true;
}
return false;
}
答案 2 :(得分: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;
}