net 的四个核心的对象
Connection 建立与特定数据源的连接 Command 对数据源执行命令 DataReader 从数据源
中 读 取 只 进 且 只 读 的 数 据 流
包 含 在
System.Data.SqlClient 命名空间中
DataAdapter 将 数 据 填 充 到 DataSet 中 去
2.Ole DB.net 的核心对象
OleDbConnection、OleDbCommand、OleDbDataReader 和 OleDbDataAdapter 这 4 个对象包
含在 System.Data.OleDb 命名控件中,需要将这个命名空间引入到文件中 目前主要用来访
问 Access、Foxpro 等简单的数据源。
3 Oracle DB .NET
对 应 Oracle DB .NET 的 4 个 核 心 对 象 分 别 是 : OracleConnection 、 OracleCommand 、
OracleDataReader 和 OracleDataAdapter。这 4 个对象包含在 System.Data.OracleClient 命名控件中,
需要将这个命名空间引入到文件中。
目前 ADO.NET1.1 带 Oracle DB.NET 数据提供程序只支持 Oracle8.1.7 以上版本,对于其他的
Oracle 版本还需要到 Microsoft 网站下载驱动程序。
4.ODBC .NET
对应 ODBC .NET 的 4 个核心对象分别是:OdbcConnection、OdbcCommand、OdbcDataReader
和 OdbcDataAdapter。这 4 个对象包含在 System.Data.Odbc 命名控件中,需要将这个命名空间引
入到文件中。
通过 ODBC 建立的数据源都可以通过 ODBC.NET 数据提供程序访问。
5.DataSet
ADO.NET 的核心组件是 DataSet,内部用 XML 描述数据,具有平台无关性。DataSet 中常用的
对象是 DataTable 和 DataRow 等等。
DataSet 通过 DataAdapter 对象从数据源得到数据,DataAdapter 是连接 DataSet 和数据库的一个
桥梁,因此命名为:“数据适配器”。
6.使用 Connection 对象
OleDbConnection Conn=new OleDbConnection();
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb");
Conn.Open();
Message.Text=Conn.State.ToString();
Conn.Close();
7.使用 Connection 对象的构造函数
OleDbConnection Conn;
Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
8.使用 Connection 对象连接 SQL Server 数据库
SqlConnection Conn;
Conn=new SqlConnection("server=localhost;database=pubs;uid=sa;pwd=''");
Conn.Open();
Message.Text=Conn.State.ToString();
Conn.Close();
9.Command 对象
建立数据连接以后,利用 Command 对象来执行命令并从数据源返回结果。
Command 对象常用的构造函数包括两个参数,1 个是要执行的 SQL 语句,另一个是已经建立的
Connnection 对象,基本语法是:
OleDbCommand Comm=new OleDbCommand("select * from grade",Conn)
10.使用 ExecuteRader 方法
OleDbConnection Conn=new OleDbConnection();
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb");
Conn.Open();
string sql="select * from grade";
if (mytext.Text!="")
sql="select * from grade where 姓名 like '%"+mytext.Text+"%'";
Message.Text=sql;
OleDbCommand Comm=new OleDbCommand(sql,Conn);
OleDbDataReader dr=Comm.ExecuteReader();
dg.DataSource=dr;
dg.DataBind();
Conn.Close();
11.程序中最关键的是如何将变量加到 SQL 语句中去的格式
程序中最关键的是如何将变量加到 SQL 语句中去。“SQL = ”Select * from grade where 姓名
like ‘%“ + str + ”%’“”语句中 str 是变量,要得到正确的格式只要按照下面的两个步骤进
行操作。
(1)写出正确的 SQL 语句,SQL =" Select * from grade where 姓名 like '%敏%'",因为姓名是
文本型变量,所以必须加上单引号,在 SQL 语句中,用单引号表示字符型变量。
(2)确定要替换的变量,这里是要将“敏”替换成变量 Key。替换的规则是:删除“敏”字,
在原字符串“敏”的位置,首先加上两个双引号,然后在两个双引号之间加上两个加号,最后
将变量加到两个加号中间。
12.使用 ExecuteScalar 方法(返回首行首列)
OleDbConnection Conn=new OleDbConnection();
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb");
Conn.Open();
String strSQL="select avg(数学)
OleDbCommand Comm=new OleDbCommand(strSQL,Conn);
Double d=(Double)Comm.ExecuteScalar();
Message.Text="所有人数学的平均成绩为"+d.ToString()+"分";
Conn.Close();
from grade";
13.使用 Like 子句实现模糊查询
OleDbConnection Conn=new OleDbConnection();
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb");
Conn.Open();
string sql="select * from grade";
if (mytext.Text!="")
sql="select * from grade where 姓名 like '%"+mytext.Text+"%'";
Message.Text=sql;
OleDbCommand Comm=new OleDbCommand(sql,Conn);
OleDbDataReader dr=Comm.ExecuteReader();
dg.DataSource=dr;
dg.DataBind();
Conn.Close();
14.使用 ExecuteNonQuery 方法执行 Insert 语句
OleDbConnection Conn=new OleDbConnection();
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb");
Conn.Open();
String strSQL="insert into grade (学号,姓名,数学) "+
"values (99,'小张',100)";
OleDbCommand Comm=new OleDbCommand(strSQL,Conn);
Comm.ExecuteNonQuery();
Conn.Close();
Response.Write("操作成功!");
15 DataReader 对象
取 DataReader 对象的数据,有两种方法:
1、通过和 DataGrid 等数据控件绑定,直接输出,
2、另一种方法是利用循环将其数据取出
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
Conn.Open();
String strSQL="select * from grade";
OleDbCommand Comm=new OleDbCommand(strSQL,Conn);
OleDbDataReader dr=Comm.ExecuteReader();
string html="
";
html+="";
html+="学号 | ";
html+="姓名 | ";
html+="数学 | ";
html+="
";
try{//读出每一条记录
{
while(dr.Read())
html+="";
html+="" + dr["学号"].ToString() + " | ";
html+="" + dr["姓名"].ToString() + " | ";
html+="" + dr["数学"].ToString() + " | ";
html+="
";
}
html+="
";
}
finally{//关闭链接
dr.Close();
Conn.Close();
}
Response.Write(html);
16.使用 DataAdapter 对象构造方法执行
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
string sql="select * from grade";
Conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, Conn);//执行 SQL
DataSet ds = new DataSet();
da.Fill(ds, "grade");
dg.DataSource=ds.Tables["grade"].DefaultView;
dg.DataBind();
17.DataAdapter 对象的 SelectCommand 属性
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
string strSQL="select * from grade";
OleDbCommand Comm=new OleDbCommand(strSQL,Conn);
OleDbDataAdapter da=new OleDbDataAdapter();
da.SelectCommand=Comm;
Conn.Open();
DataSet ds = new DataSet();
da.Fill(ds,"grade");
dg.DataSource=ds.Tables["grade"].DefaultView;
dg.DataBind();
Conn.Close();
18 使用 DataAdapter 对象的 InsertCommand 属性
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
string strInsertSQL = "INSERT INTO grade(学号,姓名,数学) VALUES(111,'盖茨',59)";
string strSelectSQL = "SELECT * FROM grade WHERE 学号=111";
string strUpdateSQL = "UPDATE grade SET 数学=60 WHERE 学号=111";
// 创建 Command 对象
OleDbCommand InsertComm = new OleDbCommand(strInsertSQL,Conn);
OleDbCommand SelectComm = new OleDbCommand(strSelectSQL,Conn);
OleDbCommand UpdateComm = new OleDbCommand(strUpdateSQL,Conn);
// 创建 DataAdapter 对象 da
OleDbDataAdapter da=new OleDbDataAdapter();
Conn.Open();
da.SelectCommand = SelectComm;
da.UpdateCommand = UpdateComm;
da.InsertCommand = InsertComm;
// 创建并填充 DataSet
DataSet ds = new DataSet();
da.Fill(ds,"grade1");
da.InsertCommand.ExecuteNonQuery();
da.Fill(ds,"grade2");
da.UpdateCommand.ExecuteNonQuery();
da.Fill(ds,"grade3");
// 将 DataSet 绑定到 DataGrid 控件
dg1.DataSource=ds.Tables["grade1"].DefaultView;
dg2.DataSource=ds.Tables["grade2"].DefaultView;
dg3.DataSource=ds.Tables["grade3"].DefaultView;
dg1.DataBind();
// 关闭连接
dg3.DataBind();
dg2.DataBind();
Conn.Close();
}
DataGrid1:
DataGrid2:
DataGrid3:
19.DataSet 对象
DataSet 封装在命名空间“Syste.Data”中。DataSet 中可以包含任意数量的 DataTable(数据表),
且每个 DataTable 对应一个数据库中的数据表和视图。
通过 DataAdapter 的 Fill 方法,将表内容填充到 DataSet 对象中,而且可以填充多个表。利用
别名来区分。比如“da.Fill(ds,"grade1");”的功能是将 da 对象中的数据填充到 ds 对象中,并起
别名“grade1”,上面的程序说明了 Fill 方法的使用。
20.自动生成 DataSet 对象
DataSet myds = new DataSet();
DataTable mydt = new DataTable("Squares");
DataRow mydr;
mydt.Columns.Add(new DataColumn("数字",typeof(Int32)));
mydt.Columns.Add(new DataColumn("平方",typeof(Int32)));
for (int i = 0; i < 10; i++)
{
mydr = mydt.NewRow();
mydr[0] = i;
mydr[1] = i * i;
mydt.Rows.Add(mydr);
}
myds.Tables.Add(mydt);
dg.DataSource = myds.Tables["Squares"].DefaultView;
dg.DataBind();}
21 操作 DataSet 对象
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
Conn.Open();
string strSQL="select * from grade;";
OleDbDataAdapter da=new OleDbDataAdapter(strSQL, Conn);
DataSet ds = new DataSet();
da.Fill(ds,"grade");
DataTable dt = ds.Tables["grade"];
DataRow row = dt.NewRow();
row["学号"] = "199";
row["姓名"] = "小布什";
row["数学"] = 58;
dt.Rows.Add(row);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
da.Update(ds,"grade");
dg.DataSource = ds.Tables["grade"].DefaultView;
dg.DataBind();
Conn.Close();
22
使用 DataView 对象
OleDbConnection Conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
String strSQL = "select * from grade";
OleDbCommand Comm = new OleDbCommand(strSQL,Conn);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = Comm;
Conn.Open();
DataSet ds = new DataSet();
da.Fill(ds,"grade");
DataView dv = new DataView(ds.Tables["grade"]);
dv.RowFilter = " 数学 > 60";
dv.Sort = "学号 desc, 数学 DESC";
Response.Write("满足条件的记录有:" + dv.Count + "条");
dg.DataSource = dv;
dg.DataBind();
Conn.Close();
23 使用 DataView 对象进行简单查询
OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+Server.MapPath("person.mdb"));
String strSQL = "select * from grade";
OleDbCommand Comm = new OleDbCommand(strSQL,Conn);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = Comm;
Conn.Open();
DataSet ds = new DataSet();
da.Fill(ds,"grade");
DataView dv = new DataView(ds.Tables["grade"],"", "姓名",
DataViewRowState.CurrentRows);
int rowIndex = dv.Find("小张");
if (rowIndex == -1)
Response.Write("没有找到!");
else
Response.Write(dv[rowIndex]["姓名"].ToString() +
dv[rowIndex]["数学"].ToString());
//dg.DataSource = dv;
dg.DataBind();
Conn.Close();
ADO.NET 对象操作 SQL Server 数据库
24
ADO.NET 中操作 SQL Server 的命名空间是:“System.Date.SqlClient”
主要包括:SqlConnection 对象、SqlCommand 对象、SqlDataReader 对象、SqlDataAdapter 对
象。
建立 SQL Server 数据库表
use pubs
go
Create Table grade
(
学号
性别
int Identity (100, 1),
Varchar(30) CHECK(性别 in('男','女')),
姓名
语文
数学
英语
Varchar(10),
int default 0,
int default 0,
int default 0
)
添加测试数据记录
insert into grade values('男','小俞',100,80,70)
insert into grade values('女','小徐',90,80,60)
insert into grade values('男','小包',50,60,90)
insert into grade values('男','小王',79,90,50)
insert into grade values('男','小栗',89,90,91)
insert into grade values('女','小卢',90,91,92)
insert into grade values('男','小李',89,91,95)
使用 ADO.NET 对象
总体上,操作 SQL Server 的程序和操作 Access 的程序方法一致。只需要做 3 个地方的修改,
就可以把操作 Access 数据库的程序改成操作 SQL Server 的程序。
(1)修 改引入的 命名空 间。操作 Access 数据 库使用的 是“System.Data.OleDb”,改 成
“System.Data.SqlClient”。
(2)修改 ADO.NET 的对象。分别把 OleDbConnection、OleDbCommand、OleDbDataReader
和 OleDbDataAdapter 等 对 象 修 改 成 SqlConnection 、 SqlCommand 、 SqlDataReader 和
SqlDataAdapter 等对象。
(3)修改 Connection 对象的数据库连接串。操作 Access 数据库一般用:
“"Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath("person.mdb");”
修改为 SQL Server 连接串:“"server=localhost;database=pubs;uid=sa;pwd=''"”。
调用 SQL Server 的存储过程
Conn = new SqlConnection("server=localhost;database=pubs;uid=sa;pwd=''");
SqlCommand Comm = new SqlCommand("testProc",Conn);
// 将命令类型设为存储过程
Comm.CommandType=CommandType.StoredProcedure;
Conn.Open();
SqlDataReader dr = Comm.ExecuteReader();
dg.DataSource = dr;
dg.DataBind();
Conn.Close();
}
调用存储过程的输入和输出参数
Conn = new SqlConnection("server=localhost;database=pubs;uid=sa;pwd=''");
SqlCommand Comm = new SqlCommand("sp_CheckPass",Conn);
// 将命令类型设为存储过程
Comm.CommandType=CommandType.StoredProcedure;
// 添加并给参数赋值
SqlParameter Parm = Comm.Parameters.Add("@CHKName", SqlDbType.VarChar, 12);
Parm.Value = "aa";
Parm = Comm.Parameters.Add("@CHKPass", SqlDbType.VarChar, 12);
Parm.Value = "aa";
Parm = Comm.Parameters.Add("@ISValid", SqlDbType.VarChar, 28);
Parm.Direction = ParameterDirection.Output;
Conn.Open();
SqlDataReader dr = Comm.ExecuteReader();
Response.Write(Comm.Parameters["@ISValid"].Value);
Conn.Close();