C#连接数据库—DataSet

上一篇主要是怎么连接数据库。这一篇对使用Dataset内存数据库进行说明。一般软件如果直接频繁的连接与操作数据库。这效率肯定是很低的。为了解决这个问题所以就引出了DataSet的概念。这可以理解成一个数据库在内存中的缓存。系统在访问数据库的某个表时,系统先连接数据库,然后使用MySqlDataAdapter数据库适配器类将内容填充到DataSet的实例中。在对DataSet数据进行操作后,这个时候要注意使用mySqlDataAdapter.Update(ds, "Table1");函数对数据库文件进行同步更新,否则,操作对源数据库是没有影响的。也就是要保持一致性。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace DateSet_内存数据库
{
    class Program
    {
        static void Main(string[] args)
        {
            string mysqlString = "Database=test;Data Source=127.0.0.1;User Id=root;Password=123;pooling=false;CharSet=utf8;port=3306";
            MySqlConnection mySql=new MySqlConnection(mysqlString);
            string sqlSearch = "select * from user ";
            //数据适配器,将数据库的所有数据全存入MySqlDataAdapter中
            MySqlDataAdapter mySqlDataAdapter=new MySqlDataAdapter(sqlSearch,mySql);
            mySql.Open();
            //创建内存数据库的实例
            DataSet ds=new DataSet();
            //将数据适配器的mySqlDataAdapter内容填充到ds中  Table1即ds数据库中的表
            mySqlDataAdapter.Fill(ds, "Table1");
            //为适配器添加sql语句
            MySqlCommandBuilder scb=new MySqlCommandBuilder(mySqlDataAdapter);

            //获取Table1的所有列 并存到一个集合中
            DataRowCollection dataRowCollection = ds.Tables["Table1"].Rows;
            //打印数据
            ui(ds.Tables["Table1"].Columns,ds.Tables["Table1"].Rows);
            //删除数据后,必须使用Update更新适配器内容,同步到数据库
            Delete(ds.Tables["Table1"].Rows,1);
            mySqlDataAdapter.Update(ds, "Table1");
            ds.AcceptChanges();//更新下ds的数据内容

            ui(ds.Tables["Table1"].Columns, ds.Tables["Table1"].Rows);
            mySql.Close();
            Console.Read();
        }
        /// <summary>
        /// 数据显示函数
        /// </summary>
        /// <param name="dataColumnCollection"></param>
        /// <param name="dataRowCollection"></param>
        private static void ui(DataColumnCollection column,DataRowCollection row)
        {
            //打印数据 {0,-10}0位占位符 -10表示负数做对齐,保持10个单位
            Console.WriteLine("{0,-10} {1,-10}",column[1],column[2]);
            foreach (DataRow dataRow in row)
            {
                Console.WriteLine("{0,-10} {1,-10}", dataRow[1], dataRow[2]);
            }
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="row"></param>
        /// <param name="a"></param>
    static    void Delete(DataRowCollection row,int a )
        {
            try
            {
                row[a].Delete();
                Console.WriteLine("修改数据成功");
            }
            catch (Exception)
            {
                Console.WriteLine("修改数据失败");
            }
        }
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="rows"></param>
        /// <param name="dr"></param>
    static void add(DataRowCollection rows, DataRow dr)
    {
        try
        {
            rows.Add(dr);
            Console.WriteLine("修改数据成功了!");
        }
        catch (Exception ex)
        {
            String message = ex.Message;
            Console.WriteLine("修改数据失败了!" + message);
        }
    }
    }
}
大概就是这些内容。DataSet的缺点是如果多人同时对一个数据源进行操作,最后更新的那个人可能会覆盖前面人的修改。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值