1、在SqlServer数据库中建一个模糊查询的存储过程,如下:
1 use Student
2 create proc poc_any_serch
3 (@TableName varchar(100),
4 @listName varchar(300),
5 @Value varchar(100))
6 as
7 exec('select * from '+@TableName+' where '+@listName+' like(''%'+@Value+'%'')')
2、新建一个c#类库用于写模糊查询的方法。
代码
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Data.SqlClient;
5 using System.Data;
6 namespace MySqlSearch
7 {
8 public class SqlSearch
9 {
10 SqlConnection OpenServer;//连接数据库类
11 /// <summary>
12 /// 构造函数用来接收用户的数据连接字符
13 /// </summary>
14 /// <param name="ServerName">SqlServer数据库实例名</param>
15 /// <param name="database">要查询的数据库名</param>
16 /// <param name="uid">用户账号</param>
17 /// <param name="pwd">用户密码</param>
18 public SqlSearch(string ServerName, string database, string uid, string pwd)
19 {
20 string server = "server='" + ServerName + "';database='" + database + "';uid='" + uid + "';pwd='" + pwd + "'";//连接数据库字符串
21 OpenServer = new SqlConnection(server);//连接数据库类
22 }
23 /// <summary>
24 /// 模糊查询
25 /// </summary>
26 /// <param name="table">要查询的表名</param>
27 /// <param name="ListName">要查询的列名</param>
28 /// <param name="SerchValue">查询的列的值是什么</param>
29 /// <returns>返回用条件过虑后的表</returns>
30 public DataTable SqlSerch(string TableName, string ListName, string SerchValue)
31 {
32 DataTable the = new DataTable();
33
34 try
35 {
36 SqlCommand odCmd = new SqlCommand();//实例化一个sql执行类
37 odCmd.Connection = OpenServer;//指定sql执行的连接
38 odCmd.CommandText = "poc_any_serch";//指定上面的存储过程的名字
39 odCmd.CommandType = CommandType.StoredProcedure;//定义执行的类型是存储过程
40 odCmd.Parameters.Add("TableName", SqlDbType.VarChar).Value = TableName;//给存储过程加参数,加传入的表名参数
41 odCmd.Parameters.Add("listName", SqlDbType.VarChar).Value = ListName;//给存储过程加参数,加传入的列名参数
42 odCmd.Parameters.Add("Value", SqlDbType.VarChar).Value = SerchValue;//给存储过程加参数,加传入的条件值参数
43 DataSet OdDs = new DataSet();//实例一个存储表的类
44 SqlDataAdapter OdSa = new SqlDataAdapter(odCmd);
45 OdSa.Fill(OdDs, "table");//执行sql存储过程并把结果放在内存中
46 the = OdDs.Tables["table"];
47 }
48 catch (Exception)
49 {
50 return null;
51 }
52 return the;//反回查询结果
53 }
54 }
55 }
56
3、上面的类库封装,可用于所有项目的模糊查询,引用既可。以上方法安全性高,不必担心Sql注入。而且代码重用、和可扩展性好。
下面来做个示例:首先在项目中引用类库的dll文件如图所示:
下面就是使用类库封装好的方法进行sqlServer模糊查询了
示例
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using MySqlSearch;
5 using System.Data;
6 namespace ConsoleApplication1
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 SqlSearch test = new SqlSearch(".", "Student","sa","sa");//实例化自定义的类传入参数--数据库实例名、要查询的数据库名称、用户名、用户密码
13 DataTable OneLass = test.SqlSerch("Class", "班级序号", "MS1114D11");//调用封装好的方法传入参数--要查询的表是[Class]、查询的条条件是[班级序号]=MS1114D11,反回一个表结果
14 string ClassName = OneLass.Rows[0].ItemArray[1].ToString();//可找到表的任意列
15 Console.WriteLine(ClassName);
16 Console.ReadKey();
17 }
18 }
19 }
20