2012-03-04 12 views
1

検索するキーワードを指定してデータベース内の行を検索させたいと思っています。このキーワードを調べたいフィールドがいくつかありますが、そのうちの1つは固有の識別子です。問題は、キーワードがGUIDでない場合、私は次のエラーメッセージを取得するには、次のとおりです。Uniqueidentifierフィールドを含めるためのキーワード検索

Conversion failed when converting from a character string to uniqueidentifier 

私は、検索を実行するために使用しているSQLはこのようなものになります。

// do not use 
string sql = @"SELECT * 
       FROM [MyTable] 
       WHERE [MyTable].[TableID] = '" + keyword + "'"; 

警告これは単なるコード例です - セキュリティリスクが発生するので、このようなsqlコマンドを記述しないでください

keywordがGUIDでない場合にSQL SELECT文が失敗しないようにするにはどうすればよいですか?

+0

+1セキュリティ警告の場合 – Colin

+0

単にクエリが実行される前に 'keyword'が有効なGUID *であるかどうかをチェックするのはなぜですか?あなたは '@"^[0-9A-F] {8} - [0-9A-F] {4} - [0-9A-F] {4} - [0-9A-F]のような正規表現を使うことができます。 {4} - [0-9A-F] {12} $ "です。 – ruakh

答えて

2
string sql; 
    Guid id; 
    if (Guid.TryParse(keyword, out id)) 
    { 
     sql = @"SELECT *  
      FROM [MyTable]  
      WHERE [MyTable].[TableID] = '" + keyword + "'";  
    } 
    else 
    { 
     sql = //search by other way 
    } 
0

私はこれが本当にあなたを助けないが、将来の読者を助けるかもしれないことを知っている。 SQL Server 2012のでは、TRY_CONVERTを使用することができます:

string sql = @"SELECT * 
    FROM dbo.[MyTable] 
    WHERE [TableID] = TRY_CONVERT(UNIQUEIDENTIFIER, '" + keyword + "');"; 

しかし、あなたが本当にやるべきことは、強く型付けされたGUIDなどのパラメータを渡し、そしてとき誰かクライアントプログラムで(try/catchを使用して)エラーを処理していますGUIDではないものを入力します。

関連する問題