1

SQL-Server DBからC#アプリケーションにINTをロードし、それを文字列に変換しようとしています。

基本的に、文字列として使用したいのはDBテーブルの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を試しましたが、同じエラーが発生しました。

何か案は?

4

3 に答える 3

3

columnNameあなたとあなたcolumnOrderはお互いに歩調を合わせていないと思います。1つは間違っています。それらは同じ情報を表すため、1 つが冗長です。代わりに使用します:

// 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 に答える