2016-12-07 15 views
0

クエリがnullを返す場合、目標は0を返すようにし、それ以外の場合は数値を返します。 SUM文は、カラムConcurrentUsersのカラム値の合計を返します。SUM SQL文、C#、NULLを返します。

次のコードは、鋳造のエラーを返します。

Specified cast is not valid.

クエリがnullを返していると、トラブルint型に変換をしているので、それは可能性があります。

以下は試みです。

明確にする必要がある場合は、質問を編集してください。

SQLクエリ:

string query = @"SELECT SUM(CAST(ConcurrentUsers AS INT)) 
       FROM [website].[db] 
       WHERE(ConcurrencyLicensing NOT LIKE 0)"; 

戻り値:

SqlConnection conn = new SqlConnection(entityBuilder.ProviderConnectionString);   
SqlCommand cmd = new SqlCommand(query, conn); 

try 
{ 
    conn.Open(); 
    object userNameObj = cmd.ExecuteScalar(); 

    if(userNameObj != null) 
    { 
     int getUserName = (int)userNameObj; 
     return getUserName; 
    } 
    else 
    { 
     return 0; 
    } 
} 
finally 
{ 
    conn.Close(); 
} 
+0

列_ConcurrentUsers_のデータ型とは何ですか? – Steve

+1

'DBNull.Value'と' null'を比較する必要があります。 – juharr

+0

'if(userNameObj == DBNull.Value)... 'を試してください。 – Pikoh

答えて

0

あなたはCOALESCEを試してみましたか?

string query = @"SELECT COALESCE(SUM(CAST(ConcurrentUsers AS INT)), 0) FROM [website].[db] 
      WHERE(ConcurrencyLicensing NOT LIKE 0)"; 

https://msdn.microsoft.com/en-us/library/ms190349.aspx

Evaluates the arguments in order and returns the current value of the first expression that initially does not evaluate to NULL.

+0

これも答えですが、コメントの答えが最初に働きました。 –

関連する問題