C#中SQL如何拼接字符串

 我来答
huanglenzhi
2018-08-23 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向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();
}
}
}

运行结果如下:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式