c#使用LIKE进行sql搜索

c#使用LIKE进行sql搜索,c#,sql,sql-like,C#,Sql,Sql Like,我有一个Gig数据库,我正在由Artist搜索,并试图在sql查询中使用,但失败了 我试过: string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '[%" + Artist + "%]'"; 没有任何记录 string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%[" + Artist + "]%'"; 这会带回所有的记录 string strSQL = "S

我有一个Gig数据库,我正在由Artist搜索,并试图在sql查询中使用,但失败了

我试过:

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '[%" + Artist + "%]'";
没有任何记录

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%[" + Artist + "]%'";
这会带回所有的记录

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '" + Artist + "'";
没有任何记录

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%[" + Artist + "]%'";
我曾尝试以各种方式使用CONTAINS,但总是出现相同的错误:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。-->System.Data.SqlClient.SqlException:关键字“CONTAINS”附近的语法不正确。 位于System.Data.SqlClient.SqlConnection.OneError(SqlException异常,布尔断开连接) 位于System.Data.SqlClient.SqlInternalConnection.OneError(SqlException异常,布尔断开连接) 位于System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject stateObj) 在System.Data.SqlClient.TdsParser.Run(RunBehavior RunBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 位于System.Data.SqlClient.SqlDataReader.ConsumerMetadata()处 在System.Data.SqlClient.SqlDataReader.get_MetaData()处 位于System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds、RunBehavior、String ResetOptions String) 位于System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、Boolean async) 位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、String方法、DbAsyncResult) 位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、String方法) 位于System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior,String方法) 位于System.Data.SqlClient.SqlCommand.ExecuteReader()处 在C:\Users\strscac\Desktop\VS\WebService1\WebService1\WebService1\Service1.asmx.cs中的WebService1.Service1.Search(字符串艺术家):第36行


试着这样做:

string strSQL = string.Format("SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%{0}%'", Artist);

尽管您应该始终参数化您的值(例如,
Artist
应该是一个参数),以防止SQL注入攻击。

尝试以下方法:

string strSQL = string.Format("SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%{0}%'", Artist);

尽管您应该始终参数化您的值(例如,
Artist
应该是一个参数),以防止SQL注入攻击。

尝试以下方法:

string strSQL = string.Format("SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%{0}%'", Artist);

尽管您应该始终参数化您的值(例如,
Artist
应该是一个参数),以防止SQL注入攻击。

尝试以下方法:

string strSQL = string.Format("SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%{0}%'", Artist);

尽管您应该始终参数化您的值(例如,
Artist
应该是一个参数),以防止SQL注入攻击。

您错过了一个有效的组合:

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%" + Artist + "%'";
正如Wahwah所说,我相信其他人也会这样做:作为一种良好的实践,学习并使用参数化查询来避免SQL注入漏洞


有关参数化查询的简单示例,请查看MSDN文档。

您错过了一个有效的组合:

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%" + Artist + "%'";
正如Wahwah所说,我相信其他人也会这样做:作为一种良好的实践,学习并使用参数化查询来避免SQL注入漏洞


有关参数化查询的简单示例,请查看MSDN文档。

您错过了一个有效的组合:

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%" + Artist + "%'";
正如Wahwah所说,我相信其他人也会这样做:作为一种良好的实践,学习并使用参数化查询来避免SQL注入漏洞


有关参数化查询的简单示例,请查看MSDN文档。

您错过了一个有效的组合:

string strSQL = "SELECT * FROM TB_CA_gigs WHERE Artist LIKE '%" + Artist + "%'";
正如Wahwah所说,我相信其他人也会这样做:作为一种良好的实践,学习并使用参数化查询来避免SQL注入漏洞


有关参数化查询的简单示例,请查看MSDN文档。

为什么在类似的示例中使用方括号[]?试着像“%”“+Artist+“%”那样执行同样的操作,看起来您并没有使用参数化查询。为什么在like中使用方括号[]?试着像“%”“+Artist+“%”那样执行同样的操作,看起来您并没有使用参数化查询。为什么在like中使用方括号[]?试着像“%”“+Artist+“%”那样执行同样的操作,看起来您并没有使用参数化查询。为什么在like中使用方括号[]?试着像“%”“+Artist+“%”那样执行同样的操作,看起来您并没有使用参数化查询。。。这不是创建参数化查询的含义。如果
Artist
是=
DROP TABLE Artist
?你的例子和OP使用的一样。。。对这就是为什么我说“虽然你不应该”这是一个例子”。如果OP问我如何创建参数化查询,我会告诉他们正确的方向。事实上,我只是把它作为一个最佳实践的注释(更像是一个最低限度的公认实践)。从你的预编辑帖子中根本看不清楚(现在也不是很清楚)。。。但是这种屈尊俯就绝对是有价值的:)嗯。。。这不是创建参数化查询的含义。如果
Artist
是=
DROP TABLE Artist
?你的例子和OP使用的一样。。。对这就是为什么我说“虽然你不应该”这是一个例子”。如果OP问我如何创建参数化查询,我会告诉他们正确的方向。事实上,我只是把它作为一个最佳实践的注释(更像是一个最低限度的公认实践)。从你的预编辑帖子中根本看不清楚(现在也不是很清楚)。。。但是这种屈尊俯就绝对是有价值的:)嗯。。。这不是创建参数化查询的含义。如果
Artist
是=
DROP TABLE Artist
?你的例子和OP使用的一样。。。对这就是为什么我说“尽管你不应该”这是一个考试