2011-07-17 7 views
1

ストアプロシージャを使用してデータベースから検索した後、値をテキストボックスに読み込もうとしています。私はfullnamelabelFnameで値を取得することができるが、私はlabelSnameに進むことはできませんよASP.NETリーダーが値を取得できません

while (reader.Read()) 
{ 
    string firstname = reader["FirstName"].ToString().Trim(); 

    if (!string.IsNullOrEmpty(firstname)) 
    { 
     string fullName = reader["FirstName"].ToString().Trim() + 
     reader["LastName"].ToString().Trim(); 

     labelFname = reader["FirstName"].ToString().Trim(); 
     labelSname = reader["LastName"].ToString().Trim(); 
     msg = "Retrieval Successful"; 
    } 
} 

:以下のサンプルコードを参照してください。これは、方法であり、以下のように値を渡しています:私は、フィールド値の1がnullであり、あなたはそのnullオブジェクトにTrimメソッドを呼び出しているし、それがエラーを投げていると思います

+0

本当に、あなたは姓に対して価値がありますか? –

+0

2番目に、FullName文字列で姓を取得していますか? –

+1

あなたにはどのようなエラーメッセージが表示されますか。つまり、labelSnameに進むことができないのはなぜですか? –

答えて

0

。値にアクセスする前に、適切なヌルチェックを行ってください。

string msg =string.empty; 
while (reader.Read()) 
{ 
    string fName=string.empty; 
    string lName=string.empty; 
    string fullName=string.empty; 

    if (!reader.IsDBNull(reader.GetOrdinal("FirstName"))) 
     fName = reader.GetString(reader.GetOrdinal("FirstName")); 

    if (!reader.IsDBNull(reader.GetOrdinal("LastName"))) 
     lName= reader.GetString(reader.GetOrdinal("LastName")); 

    fullName=fName.Trim()+ " "+lName.Trim(); 
    msg = "Retrieval Successful"; 

} 

EDIT:特に非常に多くのレコードを扱う、代わりに常にループ内GetOrdinal毎回の呼び出しの変数と使用に序インデックスを保存することをお勧めします。コード実行にいくらかスピードを出すでしょう。

int fNameLocation = reader.GetOrdinal("FirstName"); 
while (reader.Read()) 
{ 
    string fName=string.empty; 
    string lName=string.empty; 
    string fullName=string.empty; 

    if (!reader.IsDBNull(fNameLocation)) 
     fName = reader.GetString(fNameLocation); 

    //process Other fields 
} 
関連する問題