参考http://www.shareblogs.top/499/
一、简介
1、关于学习C#如何连接数据库或断开连接数据(断开连接数据库往后我将讨论),我是按照这本书一点一点学习的。
现在,终于用到了数据库,于是,学习如何去连接数据库。我们主要讨论21.7/21.8/21.9小结,其他部分用到的话,我会重点阐述:
2、 好了,关于如何建立数据库,我在21.6小结中已经建立了Autolot数据库。这里不过多地讨论如何建立数据库及数据表。详情请参考链接:
https://blog.csdn.net/xpj8888/article/details/85985592
3、那么最后,我们将逐步地展开。如图所示,我细分为下面几个步骤。
二、配置App.config文件
数据库的连接,不是非得配置App.config文件。你也可以直接在Main函数里面直接连接。App.config文件的好处是它的灵活性。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<!--方法1:直接在appSettings节点内定了服务器和数据库的连接-->
<appSettings>
<!--连接SQLServer数据库-->
<add key="provider" value="System.Data.SqlClient"/>
<!--(localdb)\MSSQLLocalDB 表示本地服务器-->
<!--E:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL14.MSSQLSERVER\MSSQL\DATA\MYSQL_LIBRARY\AUTOLOT.MDF 表示表示加载的数据库-->
<add key="cnStr" value="Data Source = (localdb)\MSSQLLocalDB; Initial Catalog = E:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL14.MSSQLSERVER\MSSQL\DATA\MYSQL_LIBRARY\AUTOLOT.MDF; Integrated Security = True"/>
</appSettings>
<!--方法2:在appSettings节点内定了服务器的连接、在connectionStrings定义数据库的连接。该方法的好处是,你可以动态连接需要连接的数据库-->
<connectionStrings>
<add name="AutoLotSqlProvider" connectionString="Data Source = (localdb)\MSSQLLocalDB; Integrated Security = SSPI; Initial Catalog = E:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL14.MSSQLSERVER\MSSQL\DATA\MYSQL_LIBRARY\AUTOLOT.MDF"/>
<add name="AutoLotOleDbProvider" connectionString="Data Source = (localdb)\MSSQLLocalDB; Integrated Security = SSPI; Initial Catalog = E:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL14.MSSQLSERVER\MSSQL\DATA\MYSQL_LIBRARY\AUTOLOT.MDF"/>
</connectionStrings>
</configuration>
使用配置文件配置数据库的好处是,你可以随意切换连接哪种类型数据,比如连接"System.Data.OleDb数据,那么你只需要更改下面的一行代码即可:
<add key="provider" value="System.Data.OleDb"/>
三、加载App.config文件
#region *******步骤1:加载配置文件*******
//数据提供者:实际上就是要连接SQLServer数据库
string strDataProvider = ConfigurationManager.AppSettings["provider"];
//连接SQLServer数据库的名字
string strConnectStr = ConfigurationManager.AppSettings["cnStr"];
#endregion
四、创建数据提供搬运工厂的对象
#region *******步骤2:创建数据提供搬运工厂的对象*******
//数据搬运的中介,将数据库的数据搬运到C#主程序,所以它有一个专业的名字叫:数据提供程序工厂
DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(strDataProvider);
#endregion
五、创建连接对象并配置连接对象、打开连接对象
#region *******步骤3:连接对象*******
//创建连接对象
using (DbConnection dbConnection = dbProviderFactory.CreateConnection())
{
//配置连接对象
dbConnection.ConnectionString = strConnectStr;
//打开连接对象
dbConnection.Open();
#endregion
}
六、创建命令对象并配置命令对象
#region *******步骤4:命令对象*******
//创建命令对象
DbCommand dbCommand = dbProviderFactory.CreateCommand();
Console.WriteLine("dbCommand.GetType().Name = ", dbCommand.GetType().Name);
//配置命令对象
dbCommand.Connection = dbConnection; //命令对象需要连接的实体。
dbCommand.CommandText = "Select * From Inventory"; //命令对象运行的文本指令(即SQL语句)
#endregion
七、创建数据读取器对象,并输出本地服务器的数据库的数据表Inventory的内容
#region *******步骤5:数据读取器对象*******
//创建数据读取器对象
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
Console.WriteLine("dbDataReader.GetType().Name = ", dbDataReader.GetType().Name);
while (dbDataReader.Read())
{
Console.WriteLine("输出当前汽车数据表Inventory的汽车ID及其品牌");
Console.WriteLine("CarID = {0}, Make = {1}", dbDataReader["CarID"],
dbDataReader["Make"].ToString());
}
}
#endregion
附录:附上C#控制台的所有代码及输出结果
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
<!--连接SQLServer数据库-->
<add key="provider" value="System.Data.SqlClient"/>
<!--(localdb)\MSSQLLocalDB 表示本地服务器-->
<!--E:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL14.MSSQLSERVER\MSSQL\DATA\MYSQL_LIBRARY\AUTOLOT.MDF 表示表示加载的数据库-->
<add key="cnStr" value="Data Source = (localdb)\MSSQLLocalDB; Initial Catalog = E:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL14.MSSQLSERVER\MSSQL\DATA\MYSQL_LIBRARY\AUTOLOT.MDF; Integrated Security = True"/>
</appSettings>
</configuration>
Program.cs:
#region 连接数据库
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Messaging;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Configuration; //ConfigurationManager类的命名空间
//using System.Data;
//using System.Data.SqlClient;
using System.Data.Common; //DbProviderFactory、DbProviderFactories、DbConnection、DbCommand、DbDataReader的命名空间
namespace test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("重要的事情说三遍:我要准备开始连接数据了,各位。然后打印一张数据表到控制台给大家look look ");
Console.WriteLine("重要的事情说三遍:我要准备开始连接数据了,各位。然后打印一张数据表到控制台给大家look look ");
Console.WriteLine("重要的事情说三遍:我要准备开始连接数据了,各位。然后打印一张数据表到控制台给大家look look ");
#region *******步骤1:加载配置文件*******
//数据提供者:实际上就是要连接SQLServer数据库
string strDataProvider = ConfigurationManager.AppSettings["provider"];
/*连接SQLServer数据库的名字*/
//方法1:连接App.config的appSettring节点
string strConnectStr = ConfigurationManager.AppSettings["cnStr"];
//方法2:连接App.config的ConnectionStrings节点的数据库
string strConnectStr2 = ConfigurationManager.ConnectionStrings["AutoLotSqlProvider"].ConnectionString;
#endregion
#region *******步骤2:创建数据提供搬运工厂的对象*******
//数据搬运的中介,将数据库的数据搬运到C#主程序,所以它有一个专业的名字叫:数据提供程序工厂
DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(strDataProvider);
#endregion
#region *******步骤3:连接对象*******
//创建连接对象
using (DbConnection dbConnection = dbProviderFactory.CreateConnection())
{
//配置连接对象
dbConnection.ConnectionString = strConnectStr;//方法2:strConnectStr2
//打开连接对象
dbConnection.Open();
#endregion
#region *******步骤4:命令对象*******
//创建命令对象
DbCommand dbCommand = dbProviderFactory.CreateCommand();
Console.WriteLine("dbCommand.GetType().Name = " + dbCommand.GetType().Name);
//配置命令对象
dbCommand.Connection = dbConnection; //命令对象需要连接的实体。
dbCommand.CommandText = "Select * From Inventory"; //命令对象运行的文本指令(即SQL语句)
#endregion
#region *******步骤5:数据读取器对象*******
//创建数据读取器对象
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
Console.WriteLine("dbDataReader.GetType().Name = " + dbDataReader.GetType().Name);
while (dbDataReader.Read())
{
//Console.WriteLine("输出当前汽车数据表Inventory的汽车ID及其品牌");
Console.WriteLine("CarID = {0}, Make = {1}", dbDataReader["CarID"], dbDataReader["Make"].ToString());
}
}
#endregion
}
Console.ReadLine();
}
}
}
#endregion
输出结果: