2016-08-30 128 views
0

は、私はこのエラーを取得しています。このコードSystem.InvalidCastExceptionの:型のオブジェクトをキャストできません「System.DBNull」「可能System.String」と入力する

SqlCommand objcmd1 = new SqlCommand("select r.login_Id from XYZ where a.logonid = @uId", myADONETConnection); 
objcmd1.Parameters.Add("@uId", SqlDbType.VarChar).Value = dr[0].ToString(); 

returnUserId = (string)objcmd1.ExecuteScalar(); 

if (returnUserId != null) 
{ 
    adid = returnUserId.ToString(); 
} 
else 
{ 
    adid = ""; 
} 

を持っています。私は戻り値としてNULL値を取得していることを知っています。この問題をどのように解決する必要がありますか?誰かが私を助けてくれますか?

System.Reflection.TargetInvocationException:例外が呼び出しのターゲットによってスローされました。 ---> System.InvalidCastException:タイプ 'System.DBNull'の型を 'System.String'にキャストすることができません。 ST_a9849ab5e79d483093f9802cd30cb2e7.csproj.ScriptMain.Main()

+0

可能な複製である[型のオブジェクトをキャストできません 'System.DBNull' '」可能System.String \を入力します](HTTP ://stackoverflow.com/questions/870697/unable-to-cast-object-of-type-system-dbnull-to-type-system-string) – Plutonix

+0

私はシステムをキャストできない理由を知りたいと思うだろう文字列がnullの場合、.DBNullをSystem.Stringに設定します。文字列をnullに設定するのではなく、例外をスローするのはなぜですか? C#デザイナーは、このような状況で人々が望むと思った他の何がありましたか? –

答えて

2

クエリを実行した結果は(0行)、ExecuteScalar戻りnull空の場合で
と文字列にキャストしようとすると、null参照エラーを取得する可能性があります!

クエリを実行した結果が実際にある場合NULL(あなたのSQL DBテーブルのカラム内NUll値)、は、ExecuteScalarはタイプSystem.DBNullの結果を返しますし、それを文字列にキャストしようとすると、このエラーが発生します。

あなたのnullをキャストしようとする前にチェックしてください(またはそのオブジェクトに対して他のことをする)。

string returnUserId = string.Empty; 
var result = objcmd1.ExecuteScalar(); 
if (result!= null) 
{ 
    returnUserId = (string) result; 
} 

result!= null結果が付属している場合は、ExecuteScalarからfalseを返しますタイプでのSystem.DBNull

+0

まだ同じ問題があります。ありがとうございます。 – user300485

+1

@ user300485 'null 'の代わりに' System.DBNull'をテストしてみてください。 – itsme86

+0

はいそれを得ました。System.DBNull.Valueを使用する必要があります。ありがとう皆さんありがとうございます。 – user300485

関連する問題