在C#中进行数据库模糊查询时,通常使用SQL语句中的LIKE
关键字来实现,以下是一些常见的场景和示例代码:
如果你想要查找某个字段中包含特定子字符串的记录,可以使用%
通配符,在一个名为Employees
的表中查找名字中包含“John”的员工:
string connectionString = "your_connection_string"; string query = "SELECT * FROM Employees WHERE Name LIKE '%John%'"; using (SqlConnection conn = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(query, conn); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["Name"].ToString()); } }
在这个例子中,%John%
表示名字中可以包含任意数量的字符,只要其中包含“John”即可。
如果你只想查找以特定字符或字符串开头的记录,可以在LIKE
关键字后使用%
通配符,查找所有以“A”开头的名字:
string query = "SELECT * FROM Employees WHERE Name LIKE 'A%'";
同样地,如果你想查找以特定字符或字符串结尾的记录,可以在LIKE
关键字前使用%
通配符,查找所有以“n”结尾的名字:
string query = "SELECT * FROM Employees WHERE Name LIKE '%n'";
有时候你可能希望进行不区分大小写的模糊查询,在这种情况下,你可以使用UPPER
或LOWER
函数将字段值转换为大写或小写,然后进行比较。
string query = "SELECT * FROM Employees WHERE UPPER(Name) LIKE '%JOHN%'";
或者你也可以在数据库层面设置不区分大小写的排序规则(Collation),但这通常需要更改数据库的配置。
你还可以结合多个条件进行模糊查询,查找名字中包含“John”且姓氏以“D”开头的员工:
string query = "SELECT * FROM Employees WHERE Name LIKE '%John%' AND LastName LIKE 'D%'";
在进行数据库查询时,务必注意防止SQL注入攻击,使用参数化查询是一个好习惯,它可以帮助你避免这种风险,以下是使用参数化查询的示例:
string searchTerm = "John"; string query = "SELECT * FROM Employees WHERE Name LIKE @SearchTerm"; using (SqlConnection conn = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(query, conn); cmd.Parameters.AddWithValue("@SearchTerm", "%" + searchTerm + "%"); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["Name"].ToString()); } }
在这个例子中,我们使用了参数@SearchTerm
来传递搜索词,并在SQL语句中通过LIKE
关键字进行了模糊匹配,这样做不仅可以提高代码的安全性,还可以使代码更加清晰易读。
在C#中进行数据库模糊查询时,关键是正确使用LIKE
关键字和通配符,并注意防止SQL注入攻击,通过灵活运用这些技术,你可以轻松地实现各种复杂的查询需求。