我想让用户通过指定要查找的关键字来搜索数据库中的行。我想查看这个关键字的一些字段,其中一个是uniqueidentifier。问题是,如果关键字不是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时不会失败?
答案 0 :(得分: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
}
答案 1 :(得分:1)
这对你有用吗?
string sql = @"SELECT *
FROM [MyTable]
WHERE convert(varchar,[MyTable].[TableID]) = '" + keyword + "'";
答案 2 :(得分:0)
我知道今天这对你没有帮助,但可能对未来的读者有所帮助。在SQL Server 2012中,您将能够使用TRY_CONVERT
:
string sql = @"SELECT *
FROM dbo.[MyTable]
WHERE [TableID] = TRY_CONVERT(UNIQUEIDENTIFIER, '" + keyword + "');";
但你应该做的是将参数作为强类型GUID传递,并在有人输入非GUID的东西时在客户端程序中处理错误(使用try/catch
)。