C#中SQL如何拼接字符串
2018-08-23 · 知道合伙人数码行家
知道合伙人数码行家
向TA提问 私信TA
ADO.NET连接数据库时,实例化***Connection(例如:OleDbConnection 、SqlConnection等)的时候需要指定连接字符串,除了利用抽象工厂模式利用反射实现灵活的连接之外,还可以通过DbProviderFactory类实现一定的灵活性。
首先介绍两个类:DbProviderFactory和DbProviderFactories。
DbProviderFactories:提供一组静态方法,这些方法用于创建 DbProviderFactory类的一个或多个实例。 方法列表如下:
DbProviderFactory:提供一组方法,这些方法用于创建提供程序对数据源类的实现的实例。
通常情况下,获取Access数据操作基本代如下:
1 string pathString = "\\database.mdb";2 string conString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + pathString;3 OleDbConnection DataOleDbConnection = new OleDbConnection(conString);4 DataOleDbConnection.Open();5 OleDbCommand DataOleDbCommand = new OleDbCommand("select * from table_user", DataOleDbConnection);6 OleDbDataReader DataOleDbDataReader = DataOleDbCommand.ExecuteReader();7 return DataOleDbDataReader;
查看代码就会发现数据提供者(Provider=Microsoft.Jet.Oledb.4.0)在连接字符串中已经给定,这样程序就失去了一定的灵活性,虽然可用switch...case语句构造不同的连接对象,但是更好的办法是利用DbProviderFactory和DbProviderFactories根据选择的提供者动态的创建这些对象。其过程很简单,就是将包含提供者名的字符串传递给DbProviderFactories类的静态方法GetFactory(),该方法返回一个工厂对象(DbProviderFactory),这个对象用于创建提供者所需的指定的对象。代码如下:
1 DbProviderFactory factory; 2 string provider = "System.Data.SqlClient"; 3 string connstr = "Data Sourse =;Initial Catalog =;User Id = ;Password = "; 4 factory = DbProviderFactories.GetFactory(provider); 5 using (DbConnection conn = factory.CreateConnection()) 6 { 7 conn.ConnectionString = connstr; 8 try 9 {10 conn.Open();11 DbCommand cmd = factory.CreateCommand();12 cmd.CommandText = "Select * from table_name";13 cmd.Connection = conn;14 DbDataReader dr;15 dr = cmd.ExecuteReader();16 dr.Read();17 conn.Close();18 }19 catch (System.Exception ex)20 {21 Console.WriteLine(ex.Message);22 }23 }
对于 string provider = "System.Data.SqlClient"可以通过下列方法获取System.Data.Common.DbProviderFactory的所有已安装提供程序的信息。
using System;using System.Text;using System.Data.Common;using System.Data;namespace Demo
{ class Program
{ static void Main(string[] args)
{
DataTable dt = DbProviderFactories.GetFactoryClasses(); foreach (DataRow dr in dt.Rows)
{
StringBuilder sb = new StringBuilder(); for (int i = 0; i < dt.Columns.Count; i++)
{
sb.Append((i + 1).ToString() + " ").Append(dr[i].ToString());
sb.Append("\n");
}
Console.WriteLine(sb.ToString());
}
Console.ReadKey();
}
}
}
运行结果如下:
广告 您可能关注的内容 |