C#连接数据库—DataSet

时间:2022-06-04 04:43:42

上一篇主要是怎么连接数据库。这一篇对使用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的缺点是如果多人同时对一个数据源进行操作,最后更新的那个人可能会覆盖前面人的修改。