前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#学习笔记 ADO.NET

C#学习笔记 ADO.NET

作者头像
乐百川
发布2022-05-05 18:51:21
7560
发布2022-05-05 18:51:21
举报

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,利用管理工具提供的图形化界面很容易做到。然后再新建一张表:

代码语言:javascript
复制
CREATE TABLE STUDENT(
SNO CHAR(10),
SNAME VARCHAR(20),
AGE SMALLINT,
CONSTRAINT STUDENT_PK PRIMARY KEY(SNO)
);

然后在插入几条数据:

代码语言:javascript
复制
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对象即可,如果没有异常发生,就说明连接成功。

代码语言:javascript
复制
const string connectionString = @"Server=LEO-PC\SQLEXPRESS;Database=test;User Id=sa;Password=123456;";
SqlConnection sqlserver = new SqlConnection(connectionString);

用配置文件管理连接字符串

如果可能使用多个数据库,使用配置文件来管理连接字符串会更好一点。 在项目的App.config文件中找到configuration节点,在其中添加一个子结点connectionStrings,然后添加如下内容,就可以将连接字符串保存在配置文件中了。

代码语言:javascript
复制
<connectionStrings>
  <add name="Sql Server Instance" providerName="System.Data.SqlClient"
       connectionString="Server=LEO-PC\SQLEXPRESS;Database=test;User Id=sa;Password=123456;"/>

</connectionStrings>

执行SQL命令

定义命令

执行命令需要使用DbCommand对象。首先先要定义命令。这里将SqlConnection放入using语句中,确保即使出现异常,数据库连接也可以关闭,并及时释放资源。

代码语言:javascript
复制
using (SqlConnection sqlserver = new SqlConnection(connectionString))
                {
                    sqlserver.Open();
                    string command = "select *from student";
                    SqlCommand cmd = new SqlCommand(command, sqlserver);
                    sqlserver.Close();

                }

执行命令

Command对象提供了三个方法用于执行不同的命令。

  • ExecuteNonQuery方法用于执行非查询的操作,例如INSERT、DELETE、UPDATE等语句或者存储过程,会返回受影响的行数。
  • ExecuteReader方法执行查询语句或者存储过程,并返回一个IDataReader类型的结果集。
  • ExecuteScalar方法执行命令并返回结果集中的第一行第一列的值。

对于SQLCommand,还提供了一个额外的方法ExecuteXmlReader,它返回一个XMLReader,可以将SQL数据库的内容转化成Xml格式。

代码语言:javascript
复制
internal static void SqlServerTest()
{
    const string connectionString = @"Server=LEO-PC\SQLEXPRESS;Database=test;User Id=sa;Password=123456;";

    try
    {
        using (SqlConnection sqlserver = new SqlConnection(connectionString))
        {
            sqlserver.Open();
            //执行查询语句
            string command = "select *from student";
            SqlCommand cmd = new SqlCommand(command, sqlserver);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine($"SNO:{reader[0]} SNAME:{reader[1]} AGE:{reader[2]}");
            }
            reader.Close();

            //执行插入语句
            command = "insert into student(sno,sname,age) values('13245','王五',32)";
            cmd = new SqlCommand(command, sqlserver);
            int rows = cmd.ExecuteNonQuery();
            Console.WriteLine($"受影响了{rows}行");
            sqlserver.Close();

            //执行ExecuteScalar
            command = "select count(*) from student";
            cmd = new SqlCommand(command, sqlserver);
            int count = (int)cmd.ExecuteScalar();
            Console.WriteLine($"总共有{count}条记录");
        }
    }
    catch (SqlException)
    {
        throw;
    }
}

MySQL数据库

下载数据提供程序

先查看一下是否安装了NuGet程序包管理器,如果没有安装的话,打开工具->扩展和更新,然后查找并安装NuGet包管理器。安装之后打开NuGet包管理器,查找并安装MySQL.Data包。安装成功之后就可以使用MySQL的数据提供程序来连接MySQL数据库了。当然这需要本机安装MySQL数据库或者有一个远程的数据库访问地址。

连接MySQL

MySQL的连接字符串是 Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername; Pwd=myPassword;,将其修改为自己的地址,例如我的就是这样的:Server=localhost;Port=3306;Database=test;Uid=root;Pwd=123456;

打开MySQL数据库,新建一个test数据库,数据表和数据仍然使用上面的student数据表。由于只使用了最简单的数据库语句,因此在这些数据库中基本是通用的。

执行命令

执行命令基本和SQL SERVER差不多,只是相关类是以MySql开头的。

代码语言:javascript
复制
const string connectionString = @"Server=localhost;Port=3306;Database=test;Uid=root;Pwd=123456;";
try
{
    using (MySqlConnection mysql = new MySqlConnection(connectionString))
    {
        mysql.Open();
        //执行查询命令
        MySqlCommand command = new MySqlCommand("select *from student", mysql);
        MySqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine($"SNO:{reader[0]} SNAME:{reader[1]} AGE:{reader[2]}");
        }
        reader.Close();
        //执行ExecuteScalar方法
        command = new MySqlCommand("select count(*) from student", mysql);
        int count = Convert.ToInt32(command.ExecuteScalar());
        Console.WriteLine($"总共有{count}条记录");
    }
}
catch (MySqlException)
{
    throw;
}

PostgreSQL

PostgreSQL的数据提供程序叫做pgsql,直接在NuGet中搜索安装即可。程序表的建立和上面的类似。因为没有使用复杂的特性,所以锁码和前面的类似。

代码语言:javascript
复制
const string connectionString = @"Server=127.0.0.1;Port=5432;Database=test;User Id=postgres;Password=123456;";
try
{
    using (NpgsqlConnection npgsql = new NpgsqlConnection(connectionString))
    {
        npgsql.Open();
        //执行查询命令
        NpgsqlCommand command = new NpgsqlCommand("select *from student", npgsql);
        NpgsqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine($"SNO:{reader[0]} SNAME:{reader[1]} AGE:{reader[2]}");
        }
        reader.Close();
        //执行ExecuteScalar方法
        command = new NpgsqlCommand("select count(*) from student", npgsql);
        int count = Convert.ToInt32(command.ExecuteScalar());
        Console.WriteLine($"总共有{count}条记录");
    }
}
catch (NpgsqlException)
{
    throw;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL SERVER数据库
    • 准备工作
      • 连接数据库
        • 直接使用连接字符串
        • 用配置文件管理连接字符串
      • 执行SQL命令
        • 定义命令
        • 执行命令
    • MySQL数据库
      • 下载数据提供程序
        • 连接MySQL
          • 执行命令
          • PostgreSQL
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档