ADO.NET是一项.NET数据库的技术,就像Java的JDBC一样。连接数据库字符串,可以在http://www.connectionstrings.com/ 这个网站上找到。不同的数据库需要不同的数据库提供程序,它们的名字都很类似。例如,Sql Server提供程序的Command类就叫做SqlCommand,MySQL提供程序的Command类就叫做MySQLCommand,它们都继承自DbCommand类。除了提供公共的功能之外,数据库提供程序还可能提供了自己数据库的特有功能。
SQL SERVER数据库
ADO.NET附带了SQL SERVER、ODBC和OLE DB的数据库提供程序。所以在使用SQL SERVER的时候不需要安装额外的数据库提供程序。在这里,我使用的是Sql Server 2014 Developer。
准备工作
首先需要确定自己的SQL SERVER实例的名字,名字可以在SQL SERVER管理工具中的数据库属性那里找到。对应的连接字符串如下:Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;
Password=myPassword;
,将其修改为自己的实例:Server=LEO-PC\SQLEXPRESS;Database=test;User Id=sa;Password=123456;
。SQL SERVER还支持另外一种登录方式——利用Windows凭据登录。如果要使用这种登录方式,去掉连接字符串中的用户名和密码部分,然后添加一个Integrated Security=SSPI;
。连接字符串可以在VS的数据库窗口的属性上查看。
为了测试,我们首先先建立一个自己的数据库,名字叫test,利用管理工具提供的图形化界面很容易做到。然后再新建一张表:
CREATE TABLE STUDENT(
SNO CHAR(10),
SNAME VARCHAR(20),
AGE SMALLINT,
CONSTRAINT STUDENT_PK PRIMARY KEY(SNO)
);
然后在插入几条数据:
INSERT INTO STUDENT(SNO, SNAME, AGE)
VALUES ('12345', '易天', 22);
INSERT INTO STUDENT(SNO, SNAME, AGE)
VALUES ('12346', '张三', 21);
INSERT INTO STUDENT(SNO, SNAME, AGE)
VALUES ('12347', '赵四', 23);
这样,数据库的准备工作就完成了。
连接数据库
直接使用连接字符串
有了连接字符串,就可以连接数据库了。连接数据库使用DbConnection对象。直接用连接字符串创建一个SQLConnection对象即可,如果没有异常发生,就说明连接成功。
const string connectionString = @"Server=LEO-PC\SQLEXPRESS;Database=test;User Id=sa;Password=123456;";
SqlConnection sqlserver = new SqlConnection(connectionString);
用配置文件管理连接字符串
如果可能使用多个数据库,使用配置文件来管理连接字符串会更好一点。
在项目的App.config文件中找到configuration节点,在其中添加一个子结点connectionStrings,然后添加如下内容,就可以将连接字符串保存在配置文件中了。
<connectionStrings><add name&#61;"Sql Server Instance" providerName&#61;"System.Data.SqlClient"connectionString&#61;"Server&#61;LEO-PC\SQLEXPRESS;Database&#61;test;User Id&#61;sa;Password&#61;123456;"/>connectionStrings>
执行SQL命令
定义命令
执行命令需要使用DbCommand对象。首先先要定义命令。这里将SqlConnection放入using语句中&#xff0c;确保即使出现异常&#xff0c;数据库连接也可以关闭&#xff0c;并及时释放资源。
using (SqlConnection sqlserver &#61; new SqlConnection(connectionString)){sqlserver.Open();string command &#61; "select *from student";SqlCommand cmd &#61; new SqlCommand(command, sqlserver);sqlserver.Close();}
执行命令
Command对象提供了三个方法用于执行不同的命令。
- ExecuteNonQuery方法用于执行非查询的操作&#xff0c;例如INSERT、DELETE、UPDATE等语句或者存储过程&#xff0c;会返回受影响的行数。
- ExecuteReader方法执行查询语句或者存储过程&#xff0c;并返回一个IDataReader类型的结果集。
- ExecuteScalar方法执行命令并返回结果集中的第一行第一列的值。
对于SQLCommand&#xff0c;还提供了一个额外的方法ExecuteXmlReader&#xff0c;它返回一个XMLReader&#xff0c;可以将SQL数据库的内容转化成Xml格式。
internal static void SqlServerTest()
{const string connectionString &#61; &#64;"Server&#61;LEO-PC\SQLEXPRESS;Database&#61;test;User Id&#61;sa;Password&#61;123456;";try{using (SqlConnection sqlserver &#61; new SqlConnection(connectionString)){sqlserver.Open();string command &#61; "select *from student";SqlCommand cmd &#61; new SqlCommand(command, sqlserver);SqlDataReader reader &#61; cmd.ExecuteReader();while (reader.Read()){Console.WriteLine($"SNO:{reader[0]} SNAME:{reader[1]} AGE:{reader[2]}");}reader.Close();command &#61; "insert into student(sno,sname,age) values(&#39;13245&#39;,&#39;王五&#39;,32)";cmd &#61; new SqlCommand(command, sqlserver);int rows &#61; cmd.ExecuteNonQuery();Console.WriteLine($"受影响了{rows}行");sqlserver.Close();command &#61; "select count(*) from student";cmd &#61; new SqlCommand(command, sqlserver);int count &#61; (int)cmd.ExecuteScalar();Console.WriteLine($"总共有{count}条记录");}}catch (SqlException){throw;}
}
MySQL数据库
下载数据提供程序
先查看一下是否安装了NuGet程序包管理器&#xff0c;如果没有安装的话&#xff0c;打开工具->扩展和更新&#xff0c;然后查找并安装NuGet包管理器。安装之后打开NuGet包管理器&#xff0c;查找并安装MySQL.Data包。安装成功之后就可以使用MySQL的数据提供程序来连接MySQL数据库了。当然这需要本机安装MySQL数据库或者有一个远程的数据库访问地址。
连接MySQL
MySQL的连接字符串是 Server&#61;myServerAddress;Port&#61;1234;Database&#61;myDataBase;Uid&#61;myUsername;
Pwd&#61;myPassword;
&#xff0c;将其修改为自己的地址&#xff0c;例如我的就是这样的&#xff1a;Server&#61;localhost;Port&#61;3306;Database&#61;test;Uid&#61;root;Pwd&#61;123456;
。
打开MySQL数据库&#xff0c;新建一个test数据库&#xff0c;数据表和数据仍然使用上面的student数据表。由于只使用了最简单的数据库语句&#xff0c;因此在这些数据库中基本是通用的。
执行命令
执行命令基本和SQL SERVER差不多&#xff0c;只是相关类是以MySql开头的。
const string connectionString &#61; &#64;"Server&#61;localhost;Port&#61;3306;Database&#61;test;Uid&#61;root;Pwd&#61;123456;";
try
{using (MySqlConnection mysql &#61; new MySqlConnection(connectionString)){mysql.Open();MySqlCommand command &#61; new MySqlCommand("select *from student", mysql);MySqlDataReader reader &#61; command.ExecuteReader();while (reader.Read()){Console.WriteLine($"SNO:{reader[0]} SNAME:{reader[1]} AGE:{reader[2]}");}reader.Close();command &#61; new MySqlCommand("select count(*) from student", mysql);int count &#61; Convert.ToInt32(command.ExecuteScalar());Console.WriteLine($"总共有{count}条记录");}
}
catch (MySqlException)
{throw;
}
PostgreSQL
PostgreSQL的数据提供程序叫做pgsql&#xff0c;直接在NuGet中搜索安装即可。程序表的建立和上面的类似。因为没有使用复杂的特性&#xff0c;所以锁码和前面的类似。
const string connectionString &#61; &#64;"Server&#61;127.0.0.1;Port&#61;5432;Database&#61;test;User Id&#61;postgres;Password&#61;123456;";
try
{using (NpgsqlConnection npgsql &#61; new NpgsqlConnection(connectionString)){npgsql.Open();NpgsqlCommand command &#61; new NpgsqlCommand("select *from student", npgsql);NpgsqlDataReader reader &#61; command.ExecuteReader();while (reader.Read()){Console.WriteLine($"SNO:{reader[0]} SNAME:{reader[1]} AGE:{reader[2]}");}reader.Close();command &#61; new NpgsqlCommand("select count(*) from student", npgsql);int count &#61; Convert.ToInt32(command.ExecuteScalar());Console.WriteLine($"总共有{count}条记录");}
}
catch (NpgsqlException)
{throw;
}