- 开放式互连技术(ODBC)
- 对象链接与嵌入式数据库技术(OLE DB)
- Java数据库互连技术(JDBC)
- ActiveX数据库对象技术(ADO)
- ADO.NET技术等
ado.net是一组用于和数据源进行交互的面向对象类库,用于实现用户到SQL Server等数据源的连接,为用户利用SQL语句实现对数据源中数据的查询、处理和更新提供支持。
Microsoft将数据类划分成不同的命名空间。在ADO.NET中,主要涉及三个命名空间:
System.Data
System.Data.SqlClient
System.Data.Oledb
用using 导入命名空间,例:
using System.Data;
ADO.NET是.NET框架中的数据访问模型,包含了两个核心组件:
-
数据提供程序.NET Framework
提供程序负责与物理数据源的连接,用于实现对底层数据源的访问
-
数据集DataSet
代表实际的数据
ADO.NET的三层数据访问架构:
各种数据库/数据源 <=> .NET数据提供程序 <=> 数据集DataSet
是指物理层的数据存储,可以是SQL Server、Oracle、MySQL、Access等物理数据库/数据源。
在.NET数据库应用程序中,用户通过一个.NET的数据提供者同数据库交互
Connection 事务:建立与特定数据源的连接
Command 参数:对数据源执行操作命令(增删改查)
DataReader 以顺序且只读的方式从数据源中读取数据
DataAdapter 数据适配器,使用Command对象对数据源执行SQL命令,将数据从数据库读到数据集
* SelectCommand
* InsertCommand ======填充=====> DataSet
* DeleteCommand
* UpdateCommand
可把数据集DataSet看成是内存中的数据库,是专门用来处理从数据库中读出的数据的。
在从数据库完成数据查询后,查询出的数据就存放在DataSet中,它是从数据源中查询到的数据在内存中驻留的表示形式,可以把它看成是内存中的数据库。
因此,DataSet是不依赖于数据库的独立数据集合,即使断开数据链路,或者关闭数据库,DateSet依然是可用的。
是指不直接对数据库进行操作,而是先实现数据库连接,再通过DataAdapter填充DataSet对象,然后客户端再通过读取DataSet来获取需要的数据。同理,在更新数据库中的数据时,也是先更新DataSet,然后再通过DataAdapter来更新数据库中对应的数据。
是指客户在操作过程中,与数据库的连接是打开的,使用Command对象对数据库的相关操作,使用DataReader对象以顺序方式读取数据。
// 定义连接字符串
string str = "Server=DESKTOP-4HSQLSI\\LRC;database=cs172;integrated security=true";
// string str = "Server=DESKTOP-4HSQLSI\\LRC;database=cs172;uid=登录名;pwd=密码";
// stirng str = "Data Source=DESKTOP-4HSQLSI\\LRC;Initial Catalog=cs172;integrated security=true";
/**
* Server等同于Data Source
* database等同于Initial Catalog
* integrated security=true 表示采用信任模式连接(登录数据库服务器为window身份验证)
* uid=登录名;pwd=密码(登录数据库服务器为SQL server身份验证)
* DESKTOP-4HSQLSI\\LRC 服务器名称
* cs172 要连接的数据库名称
*/
// 定义数据库连接对象并初始化
SqlConnection sqlConn = new SqlConnection(str);
sqlConn.Open();
- SqlCommand对象的常用属性和方法
属性或方法 | 说明 |
---|---|
CommandText | 设置或获取在数据源上执行的SQL语句或存储过程名 |
Connection | 设置或返回与Command相关的Connection对象 |
CreateCommand() | 用于建立sqlCommand对象 |
ExecuteReader() | 执行CommandText中的SQL查询语句,查询值返回到DataReader对象 |
ExecuteScalar() | 返回单个值,如求和、求最大值等SQL聚合函数 |
ExecuteNonQuery() | 执行增、删、改等无返回值的SQL操作 |
-
增删改:建立SqlCommand对象,执行SQL语句或存储过程对数据进行增删改。
SqlCommand对象用于通过Connection对数据库下达操作数据库的命令
// 定义SQL语句字符串(增删改) string sql = string.Format("delete from cenJi where xueHao='{0}'", xueHao.Text.Trim()); // 定义数据库命令对象cmd并初始化 SqlCommand cmd = new SqlCommand(sql,sqlConn); // 执行命令 cmd.ExecuteNonQuery();
-
查询:建立SqlCommand对象,执行SQL语句或存储过程后对返回的“结果”进行操作:
-
方法一:使用数据读取器对象DataReader直接一行一行地读取数据集;
遍历DataReader中的记录
Command对象在执行ExecuteReader()方法后,在返回记录的同时,将产生一个数据读取器对象DataReader来指向所返回的记录集,利用DataReader就可以读取返回的记录。
DataReader对象用于以最快的速度检索并检查查询所返回的行,返回的记录是一种只读的且指针只能前移的数据流
// 定义一个数据读取器对象 SqlDataReader sqlData = command.ExecuteReader(); //处理数据读取器sreader中的数据 // Read()使sqlDataReader移到下一条记录,SqlDataReader的默认位置在第一条记录前面 if (sqlData.Read()) { xinMin.Text = sqlData["xinMin"].ToString(); xinBie.Text = sqlData["xinBie"].ToString(); senGao.Text = sqlData["senGao"].ToString(); } //关闭DataReader对象 sqlData.Close();
- DataReader对象的常用属性和方法
属性或方法 说明 FieldCount 当前行中的列数 -
| Item | DataReader中列的值 |
| HasRows | 指出DataReader是否包含一行或多行 |
| Close() | 关闭DataReader对象 |
| GetName() | 获取指定列的名称 |
| GetValue() | 获取指定序号处的列的值 |
| Read() | 使DataReader移到下一条记录,返回True表示还有下一条数据,否则表示数据读取完毕 |
- 方法二:使用数据集对象DataSet和数据适配器对象DataAdapter来访问数据库。
// sql语句
string sql = "select *from xueSen";
//定义一个数据库适配器对象
SqlDataAdapter sda = new SqlDataAdapter(sql, sqlConn);
//定义一个数据集对象
DataSet dataSet = new DataSet();
//将查询结果填充数据集对象,并用一个表的别名"ds"标记
sda.Fill(dataSet, "ds");
//指定dateGridView的数据源,dataGridView是以表格方式显示数据的控件
dataGridView1.DataSource = dataSet;
dataGridView1.DataMember = "ds";
DataAdapter对象(数据适配器对象),是DataSet对象与数据源之间的桥梁,负责从数据源中检索数据,并把检索到的数据填 充到DataSet对象中的表;同时,也把用户对DataSet对象的更改写到数据源中。
DataAdapter一般要与DataSet共同使用,来操作数据库中的数据。
- DataGridView控件的常用属性
属性 | 说明 |
---|---|
Columns | 所有列的集合 |
Rows | 所有行的集合 |
DataSource | 数据源 |
DataMember | 显示的表的名称 |
RowCount | 获取或设置DataGridview中的显示行 |
ReadOnly | 是否可编辑单元格 |
SelectedIndex | 获取选中行的索引 |
SelectedRow | 获取选中的行 |
//关闭与数据库的连接
sqlConn.Close();
- 通过vs自带的window窗体来实现
private void button1_Click(object sender, EventArgs e)
{
// 定义连接字符串
string str = "Server=DESKTOP-4HSQLSI\\LRC;database=cs172;integrated security=true";
// string str = "Server=DESKTOP-4HSQLSI\\LRC;database=cs172;uid=登录名;pwd=密码";
// stirng str = "Data Source=DESKTOP-4HSQLSI\\LRC;Initial Catalog=cs172;integrated security=true";
/**
* Server等同于Data Source
* database等同于Initial Catalog
* integrated security=true 表示采用信任模式连接(登录数据库服务器为window身份验证)
* uid=登录名;pwd=密码(登录数据库服务器为SQL server身份验证)
* DESKTOP-4HSQLSI\\LRC 服务器名称
* cs172 要连接的数据库名称
*/
// 定义数据库连接对象并初始化
SqlConnection sqlConn = new SqlConnection(str);
sqlConn.Open();
try
{
// 定义SQL语句字符串(增删改)
string sql = string.Format("delete from cenJi where xueHao='{0}'", xueHao.Text.Trim());
// 定义数据库命令对象cmd并初始化
SqlCommand cmd = new SqlCommand(sql,sqlConn);
// 执行命令
cmd.ExecuteNonQuery();
MessageBox.Show("删除成功!", "提示");
}
catch(Exception i)
{
MessageBox.Show(i.ToString(), "错误");
}
sqlConn.Close();
}
private void Search_Click(object sender, EventArgs e)
{
string str = "Server = DESKTOP-4HSQLSI\\LRC;database=cs172;integrated security=true";
SqlConnection sqlConnection = new SqlConnection(str);
sqlConnection.Open();
try
{
string sql = "select xinMin,xinBie,senGao from xueSen where xueHao='" + xueHao.Text.Trim() + "'";
// string sql = string.Format("select xinMin,xinBie,senGao from xueSen where xueHao={0}", xueHao.Text.Trim());
SqlCommand command = new SqlCommand(sql, sqlConnection);
// 定义一个数据读取器对象
SqlDataReader sqlData = command.ExecuteReader();
//处理数据读取器sreader中的数据
if (sqlData.Read())
{
xinMin.Text = sqlData["xinMin"].ToString();
xinBie.Text = sqlData["xinBie"].ToString();
senGao.Text = sqlData["senGao"].ToString();
}
else
{
MessageBox.Show("该学生不存在!", "提示");
}
//关闭DataReader对象
sqlData.Close();
sqlConnection.Close();
}
catch(Exception i)
{
MessageBox.Show(i.ToString(), "错误");
}
}
private void Form1_Load(object sender, EventArgs e)
{
string str = "Server = DESKTOP-4HSQLSI\\LRC;database=cs172;integrated security=true";
SqlConnection sqlConn = new SqlConnection(str);
sqlConn.Open();
// sql语句
string sql = "select *from xueSen";
//定义一个数据库适配器对象
SqlDataAdapter sda = new SqlDataAdapter(sql, sqlConn);
//定义一个数据集对象
DataSet dataSet = new DataSet();
//将查询结果填充数据集对象,并用一个表的别名"ds"标记
sda.Fill(dataSet, "ds");
//指定dateGridView的数据源,dataGridView是以表格方式显示数据的控件
dataGridView1.DataSource = dataSet;
dataGridView1.DataMember = "ds";
//关闭与数据库的连接
sqlConn.Close();
}
, sqlConn);
//定义一个数据集对象
DataSet dataSet = new DataSet();
//将查询结果填充数据集对象,并用一个表的别名"ds"标记
sda.Fill(dataSet, "ds");
//指定dateGridView的数据源,dataGridView是以表格方式显示数据的控件
dataGridView1.DataSource = dataSet;
dataGridView1.DataMember = "ds";
//关闭与数据库的连接
sqlConn.Close();
}