栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C#的ADO.NET操作SqlServer数据库(上)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#的ADO.NET操作SqlServer数据库(上)

前言:ADO.NET是一种C#的操作数据库的一组类库和API,
使用它们能够有效的方便的使用数据库,

1.导入相关的资源

因为新建的项目并没有各个数据库的连接类(数据库驱动),需手动的安装.
这里列出几种不同的驱动,它们各自使用于不同类型的数据库

  1. SQL Server数据库----------------------System.Data.SqlClient
  2. Mysql数据库------------------------------MySql.Data
  3. Oracle数据库-----------------------------System.Data.OracleClient

在项目右键NuGet包管理
(感觉很像Maven仓库,同样也是需要什么包就去上面Down就行了)
从nuget.oracle的库中搜索包名下载安装即可,

2.创建SQL server数据库的连接

在System.Data.SqlClient中提供了
SqlConncetion对象,可以很方便的连接数据库(特别对多数据源的使用比较方便)

public sealed class SqlConnection : DbConnection, ICloneable
    {
        //sqlConnection是一个sealed类,它提供了三个构造方法
        public SqlConnection();
        //这个构造方法只需要提供URL即可
        public SqlConnection(string connectionString);
        //这个构造方法中的SqlCredential对象只是对数据库连接的账号和密码进行了封装而已
        public SqlConnection(string connectionString, SqlCredential credential);

	.........
	}

连接URL

 1. server={IP};database={数据库名};uid={数据库角色名};pwd={数据库角色的密码}

(如果Sql Server的服务就在本机的话则直接在IP位置设置一个.即可)

对比Java连接SqlServer的URL来说的话,确实是更加简洁一点
(对比新版的mysql的url在后面加一堆的&useXXX还是更简单一点的)

driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
url = jdbc:sqlserver://localhost:1433;DatabaseName=XXX

接下来连接是很简单的的
只需要调用SqlConnection的Open方法即可

SqlConnection conn = new SqlConnection("server=.;database=XXX;uid=XXX;pwd=XXX");
conn.Open();

而Java的连接则需要使用ManageDriver类

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=XX",username,password);

接下来直接进行连接;

static void main(String[] args){
	String URL = "server=.;database=Fortest;uid=sa;pwd=LiHan199968";

   SqlConnection conn = new SqlConnection(URL);

   conn.Open();  //创建连接.开启连接

   if (conn.State == ConnectionState.Open)   //查看连接状态
   {
       Console.WriteLine("數據庫連接成功!");
   }

   Console.ReadLine();
}

运行结果:

數據庫連接成功!
3.创建SqlCommand对象执行SQL语句

ADO.NET使用SqlCommand对象来执行SQL语句,
先看看其构造方法:

public sealed class SqlCommand : DbCommand, ICloneable
    {
    
        public SqlCommand();
        
        //参数cmdText就是索要执行的SQL语句
        public SqlCommand(string cmdText);
        
        //SqlConnection形参就是数据库连接对象,也就是说它需要绑定一个数据库连接
        public SqlCommand(string cmdText, SqlConnection connection);
        
        //SqlTranscation对象则可以在执行中给操作添加事物
        public SqlCommand(string cmdText, SqlConnection connection, SqlTransaction transaction);
        
 }

再看看执行Sql语句所提供的基礎方法,(那些異步執行方法以後再做研究)

public override int ExecuteNonQuery(); 
//顧名思義,就是执行非查询语句的方法,返回一个受影响记录的行数

public SqlDataReader ExecuteReader();
//返回一个SqlDataReader,其中包含了查询结果,可以取出

public override object ExecuteScalar();
//返回查询结果集的第一行,

测试用表:

create table Student(
S_ID int primary key identity(1,1),
S_Name varchar(30),
S_Address varchar(100),
S-Date date,
)

现有记录:

1 张三 吳興 2021-11-02
2 李四 skd 2021-11-02
3 李四 skd 2021-11-02
4 王五 HSdaneLee 2021-11-02

测试代码:

static void main()
{
	 String URL = "server=.;database=Fortest;uid=sa;pwd=LiHan199968";

     SqlConnection conn = new SqlConnection(URL);

     conn.Open();

     SqlCommand cmd = new SqlCommand();
     //设置cmd对应的Connection对象
     cmd.Connection = conn;
     //设定要执行的SQL语句
     cmd.CommandText = "delete from Student where S_Name = '李四'";
     //执行SQL
     int Count = cmd.ExecuteNonQuery();
     //打印执行的结果
     Console.WriteLine("執行了" + cmd.CommandText+
         "這條修改影響到了"+Count+"條記錄n----------------------------------");

     Console.ReadLine();
}

结果:

執行了delete from Student where S_Name = '李四'這條修改影響到了2條記錄
--------------------------------

现在再回去看看数据库

1
張三
吳興
2021-11-02
4
王五
HSdaneLee
2021-11-22

接下来再看一看用sqlCommand执行查询操作

 String URL = "server=.;database=Fortest;uid=sa;pwd=LiHan199968";

            SqlConnection conn = new SqlConnection(URL);

            conn.Open();

            SqlCommand cmd = new SqlCommand();

            cmd.Connection = conn;

            cmd.CommandText = "select * from Student";

            SqlDataReader reader = cmd.ExecuteReader();
            //连接和操作设置SQL语句的代码不变,只需要将SqlDataReader对象进行遍历即可
            while (reader.Read())
            {
                Console.WriteLine("學號:" + reader[0] + "姓名:" + reader[1] + "地址:" + reader[2] + "日期:"+reader[3]+"n");
                
            }

            Console.ReadLine();

结果:

學號:1姓名:張三地址:吳興日期:2021/11/2 00:00:00

學號:4姓名:王五地址:HSdaneLee日期:2021/11/22 00:00:00
4.DataAdapter与DataSet的使用

DataAdapter可以视为一种数据层操作的适配器,需要配合一个SqlCommand
它需要设定一个Command属性,分别对应增删改查

  1. SelectCommand 查询
  2. DeleteCommand 删除
  3. InsertCommand新增
  4. UpdateCommand更新

看一看它的源码:

public sealed class SqlDataAdapter : DbDataAdapter, IDataAdapter, IDbDataAdapter, ICloneable
    {
        
        public SqlDataAdapter();
        //通过SqlCommand初始化SqlDataAdapter
        public SqlDataAdapter(SqlCommand selectCommand);
        //通过SQLCommandText属性和Connection对象进行初始化
        public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection);
        //通过SQLCommandText属性和连接UROL
        public SqlDataAdapter(string selectCommandText, string selectConnectionString);

       
        //四种Command属性
        public SqlCommand DeleteCommand { get; set; }
        
        public SqlCommand InsertCommand { get; set; }
       
        public SqlCommand SelectCommand { get; set; }
        
        public override int UpdateBatchSize { get; set; }
       
        public SqlCommand UpdateCommand { get; set; }

    }

DataSet是用于保存查询数据的一种结构,
他很像JDBC中的ResultSet,这里先不去看其源码,只需知道从它的Tables属性里取数据即可
现在完成SqlAdapter的测试;

String URL = "server=.;database=Fortest;uid=sa;pwd=LiHan199968";

            SqlConnection conn = new SqlConnection(URL);

            conn.Open();

            SqlCommand cmd = new SqlCommand();

            cmd.Connection = conn;

            SqlDataAdapter adapter = new SqlDataAdapter();

            adapter.SelectCommand = cmd;
            //指定查询语句
            cmd.CommandText = "select * from Student";
            //创建DataSet实例
            DataSet ds = new DataSet();

            //执行Adapter关联的SqlCommand语句,并将其填充到DataSet中
            adapter.Fill(ds);
            //取出DataTable
            DataTable dt = ds.Tables[0];

            for(int i = 0; i < dt.Rows.Count; i++)
            {
              //遍历取出DataTable中的值
             Console.WriteLine("No:"+dt.Rows[i][0]+"Name:"+dt.Rows[i][1]+"Address:"+dt.Rows[i]				    [2]+"Date;"+dt.Rows[i][3]);

            }

            Console.Read();
        }

结果:

No:1Name:張三Address:吳興Date;2021/11/2 00:00:00
No:4Name:王五Address:HSdaneLeeDate;2021/11/22 00:00:00

由此用它提供的API实现了基本的数据库操作,接下要掌握,SqlParameter的使用,并将其封装,
写一个数据库工具类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号