2017-02-04 13 views
0

どのようにC#のSelectクエリからIDとして変数を取得できますか。 特定のDevicetypeを持つすべてのIDを選択する必要があるクエリを作成しました。例外だc#で選択クエリの後にテーブルのIDを取得する

sqlCommand = new SqlCommand("SELECT Id FROM T_Table1 WHERE DeviceType='" + dev + "'" + "", DbConnect()); 

       int id = (int)sqlCommand.ExecuteScalar(); 

型 'System.InvalidCastExceptionの' の未処理の例外は、TEST.EXE

で発生しました追加情報:指定されたキャストは有効ではありません。

+0

からあなたのIDを含むデータローのセットを返すようにExecuteEnumerable味を使用してお勧めします。代わりにExecuteReaderが必要な場合があります。 – Crowcoder

+0

データベース型がbigintの場合、intではなくc#longを使用します。 – Crowcoder

+0

ありがとう@Crowcoder。出来た。 long id =(long)sqlCommand.ExecuteScalar(); – maki

答えて

0

まず、 'id'カラムのデータベースタイプを確認する必要があります。 bigintの場合は、intの代わりにlongを使用してください。

セカンダリでは、クエリ文字列をselect文に追加しないでください。これにより、ハッカーは後であなたのアプリやサービスに対してSQLインジェクションを実行できます。

パラメータをSqlCommandオブジェクトで使用してください。

string sql= "SELECT Id FROM T_Table1 WHERE [email protected]"; 

SqlCommand command = new SqlCommand(sql, DbConnect()); 
command.Parameters.Add("@dev", SqlDbType.Text); 
command.Parameters["@dev"].Value = dev; 

long id = (long)command.ExecuteScalar(); 
+0

テーブルの構造を知っていますか?IDはlong型、int型... –

0

あなたがしていることは正しかったですが、IDがデータベースのintではないようです。文字列または2重である可能性があります。 SELECTクエリがデータベースに一致する値が見つからない場合は、私が正しくrembemberならば、sqlCommand.ExecuteScalar()の戻り値は、nullなり、より多くの情報に

+0

これをコメントとして書く方がよいでしょう。 –

+0

@ Farzin Kanzi私は知っていますが、まだ50人の担当者がいないのでコメントできません:( –

+0

データベース内のIDはbigintで、ヌルではなくユニークです – maki

-1

を提供してください。 null値はintにキャストできません。キャストを行う前に、返された値を最初にチェックする必要があります。さらに、intのすべての可能なbigint値を保持できないため、タイプをintの代わりにlongに変更したい場合があります。

+0

誰でもこれをdownvotedあなたはその答えが間違っていることを説明して、それを修正できるように気をつけますか? – Striezel

0

あなたはIIRC返されたDataRowの最初の列の最初の値を返すスカラを実行呼んでいる...だからあなたはの整数値を取るしようとしている。この

int id =Convert.ToInt32(sqlCommand.ExecuteScalar()); 
0

を試してみてください他の人が言っている、nullは出現できません。

私はあなただけそれらのすべて、最初のIDをない得るだろう働いていた場合T_Table1

using (var myCommand = new SqlCommand()) 
    { 
     var query = string.Format("SELECT ID FROM T_Table1 WHERE DeviceType='{0}'", dev); 
     var rows = myCommand.ExecuteEnumerable(query); 
     foreach (var row in rows) 
      { 
      // do whatever to each row 
      var id = row["ID"]; 
      } 
    } 
関連する問題