Поиск по ключевому слову для включения поля Uniqueidentifier - PullRequest
1 голос
/ 04 марта 2012

Я хочу позволить пользователю искать строки в базе данных, указав ключевое слово для поиска.Есть несколько полей, в которых я хотел бы найти это ключевое слово, одно из которых - уникальный идентификатор.Проблема в том, что если ключевое слово не GUID, я получаю следующее сообщение об ошибке:

Conversion failed when converting from a character string to uniqueidentifier

SQL, который я использую для поиска, выглядит примерно так:

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

ПРЕДУПРЕЖДЕНИЕ: это просто пример кода - НЕ пишите команды sql, подобные этой, так как это создает угрозу безопасности

Как мне написать оператор SQL select, чтобы он не потерпел неудачу приkeyword это не GUID?

Ответы [ 3 ]

2 голосов
/ 04 марта 2012
    string sql;
    Guid id;
    if (Guid.TryParse(keyword, out id))
    {
       sql = @"SELECT *     
           FROM [MyTable]    
           WHERE [MyTable].[TableID] = '" + keyword + "'";    
    }
    else
    {
      sql = //search by other way
    }
1 голос
/ 04 марта 2012

Это у вас работает?

string sql = @"SELECT * 
               FROM [MyTable]
               WHERE convert(varchar,[MyTable].[TableID]) = '" + keyword + "'";
0 голосов
/ 04 марта 2012

Я знаю, что это не очень помогает вам сегодня, но может помочь будущим читателям. В SQL Server 2012 вы сможете использовать TRY_CONVERT:

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

Но что вам действительно следует делать, так это передавать параметр как строго типизированный GUID и обрабатывать ошибку (используя try/catch) в клиентской программе, когда кто-то вводит что-то, что не является GUID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...