-5

selectコマンドで結果が得られない場合、例外がスローされます。代わりに、例外なくプロセスを続行したいと思います。selectステートメントから取得したデータがあるかどうかを確認してこれを制御するにはどうすればよいですか?

これが私の質問です:

sqlid = new SqlCommand("SELECT TOP 1 Proj_id FROM Proj_details WHERE Front_end = '" + strfrontend + "'ORDER BY Date_time desc", con);
id = sqlid.ExecuteScalar().ToString();
4

5 に答える 5

4

例外を使用してプログラム フローを制御することは (他の回答で示唆されているように)、間違った解決策です。ExecuteScalar()結果を返さなくてもよい場合は、呼び出す前に返された値を確認してくださいToString()

定義により、結果がない場合、ExecuteScalar は null を返します。

object val = sqlid.ExecuteScalar();
if( val != null ){
    id = val.ToString();
}else{
    // do something (or nothing) and continue
}

参照: ExecuteScalar が NullReferenceException をスローする

于 2012-08-08T06:44:15.240 に答える
0

ExecuteScalar の代わりに ExecuteReader を使用して、空の結果を次のように処理してみてください。

SqlCommand sqlid = new SqlCommand("SELECT TOP 1 Proj_id FROM Proj_details WHERE Front_end = '" + strfrontend + "'ORDER BY Date_time desc", con);

SqlDataReader dr = sqlid.ExecuteReader();
if (dr.Read())
{
 id  = dr[0].ToString();
}
else
{
    // handle empty result here
}
于 2012-08-08T06:45:18.840 に答える
-1

try-catch ブロックは機能しませんか?

    try
    {
        //Execute your SQL-statement here        
    }
    catch(SqlException)
    {
        //If you want something specific to happen when the
        //exception is thrown, put that here.
    }

http://msdn.microsoft.com/en-us/library/0yd65esw(v=vs.80).aspx

于 2012-08-08T06:41:30.990 に答える
-1

それを try/catch ステートメントでカプセル化します。

try
{
    sqlid = new SqlCommand("SELECT TOP 1 Proj_id FROM Proj_details 
                           WHERE Front_end = '" + strfrontend 
                           + "'ORDER BY Date_time desc", con
                           ); 
    id = sqlid.ExecuteScalar().ToString();
}
catch(exception)
{
   // do something with the exception
}
于 2012-08-08T06:43:00.653 に答える