【ADO.NET的主要组件-。.NET framework数据提供程序和DataSet(数据集)】
一.DataSet数据集负责对数据库执行命令。
二.NET framework数据提供程序的四个核心对象
注意!在Sql Server数据库中实际应用的时候对象前边要加sql,不同数据库的前缀不同。
1.Connection对象:连接数据库
常用属性:ConnectionString (设置/获取应用程序连接数据库的连接字符串)
常用方法:void open()[使用ConnectionString属性所指定的设置打开数据库连接]
void Close()[关闭与数据库的连接]
<建立应用程序与数据库连接需要以下三个步骤>
①.定义连接字符串
sql Sever 数据库的连接字符串格式一般如下:
String connString = "Data Source=.; Initial Catalog = pubs;uid = sa;pwd = 密码"
②.创建Connection对象
SqlConnection connection = new SqlConnection(conString);
③.打开与数据库的连接
connection.Open();
关闭与数据库的连接
connection.Close();
经验:打开数据库连接,执行命令后,要确保关闭数据库连接,否则下次执行后报Exception,还需要先关闭在启动。
《异常处理》:数据库操作过程可能出现异常,使用try-catch-finally语句处理异常.
处理操作异常的实例:
//测试打开数据库的操作
string connString = "Data Source=.;Initial Catalog=QQMaster;User ID=sa;Password=密码";
//创建SqlConnection的对象
SqlConnection conn = new SqlConnection(connString);
try
{
//打开数据库连接
conn.Open();
Console.WriteLine("打开数据库连接成功!");
}
catch (Exception ex)
{
Console.WriteLine("出现异常:"+ex.Message);
}
finally
{
conn.Close();
Console.WriteLine("关闭数据库连接成功!!");
Console.ReadLine();
}
经验:catch可以放多个,其中的参数是子类和父类Exception ex(ex.Message),父类参数的放在最后一个。
2.Command对象:对数据库执行命令(增删改)
常用属性:
1.Connection:Command 对象使用的数据库连接
2.CommandText 执行对的sql语句
常用方法:
1.int ExecuteNonQuery() 执行不返回行的语句,如UPDATE等(增,删,改均如此)
2.SqlDataReader ExecuteReader()或SqlDataReader ExecuteReader(CommandBehavior behavior)执行查询命令,返回DataReader对象
3.object ExecuteScalar()返回单个值,如执行count(*).如求学生总数可以加weher条件查某一个班的学员总数
要使用Command对象,必须有一个可用的Connection对象,使用Command对象的步骤:
1.创建数据库连接(创建Connection对象)
2.定义执行的sql语句
3.创建command对象
使用已有的Connection对象和sql语句字符串创建一个Command对象
4.执行sql语句
使用Command对象的某个方法执行命令.
数据库查询实例:
class DBOperation
{
//数据库连接字符串
string strCoon = "Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=19960106";
///<param name = "UserName">用户名</par6666666am>
///<param name = "pwd">密码</param>
///<param name = "strMsg">返回的处理信息</param>
///<return>成功&失败</return>
public bool CheckedUserInfo(String userName, String pwd, ref string strMsg)
{
//创建数据库连接
SqlConnection conn = new SqlConnection(strCoon);
//异常处理
try
{
//创建sql语句
string strSql = "select count(*) from Admin where LoginId ='" + userName + "'and Loginpwd='" + pwd + "'";
//打开与数据库的连接
conn.Open();
//创建Command命令
SqlCommand comm = new SqlCommand(strSql, conn);
int Reta = (int)comm.ExecuteScalar();//强制转换为int类型
if (Reta !=1)
{
strMsg = "输入无效,用户或密码错误";
return false;
}
else
{
Console.WriteLine("登录成功!");
return true;
}
}
catch (Exception ex)
{
strMsg = "发生异常!" + ex.Message;
return false;
}
finally
{
//创建SchoolManager类的对象
SchoolManager sm = new SchoolManager();
sm.SystemMenu();//调用SchoolManager类的显示系统菜单的方法
//关闭数据库
Console.WriteLine("数据库连接已关闭!");
conn.Close();
}
}
/// <summary>
/// 查询学员人数
/// </summary>
/// <returns>-1:失败;其他:成功</returns>
public int GetStudentAmount()
{
//创建SqlConnection对象
SqlConnection conn = new SqlConnection(strCoon);
try
{
//将要查的sql语句赋给一个字符串类型的变量
string strSql = "select count(*) from Student";
//建立数据库连接
conn.Open();
//创建SqlCommand对象 ,将数据源字符串变量和将要查的Sql语句的字符串变量两个参数放入。
SqlCommand comm = new SqlCommand(strSql, conn);
//执行Command对象中的方法查询
int iRet = (int)comm.ExecuteScalar();
return iRet;
}
catch (Exception)
{
//异常返回-1
return -1;
}
finally
{
//关闭数据库
conn.Close();
}
}
}
3.DataReader对象:负责从数据源读取只进且只读的数据流(一次查询多行多列的数据)
StringBuilder类不像String类具有很多字符串处理的方法,但是在替换,添加或删除字符串时,
StringBuilder类对象的执行速度要比String类的对象快得多。
语法:
//声明一个空的StringBuilder类的对象
StringBuilder 对象名称 = new StringBuilder();
//声明一个StringBuilder对象,值为“字符串初始值”
StringBuilder 对象名称 = new StringBuilder("字符串初始值")
StringBuilder常用的属性和方法
属性:
Capacity:获取或设置可包含在当前对象所分配的内存中的最大字符个数
Length:获取或设置当前对象的长度
StringBuilder Append(string value):在结尾追加
StringBuilder AppendFormat(string format,object arg0,object arg1):添加特定格式的字符串
StringBuilder Insert(int index,string value):在指定位置插入指定字符串
Remove(int styartIndex,intLength):移除指定字符串
【DataReader对象的主要属性和方法】
属性:
HasRows:布尔型的返回结果,有结果返回true,反之false。
FieldCount:当前行中的列数
方法:
bool Read():前进到下一行记录,读到记录为true,反之false。
void Close():关闭DataReader对象。
创建和使用DataReader对象的步骤:
(1):创建Command对象。
(2):调用Command对象的ExecuteReander()方法返回一个DataReader对象。
(3):调用DataReader的Read()方法,逐行读取查询结果集的记录。
(4):读取当前行的某列的数据。
如(type数据类型)dataReader[列名或列的索引],(string)dataReader["StudentName"]取到的列值为object类型需要类型转换。
(5):关闭DataReader对象,调用它的Close()方法。
4.DataAdapter对象:负责数据集和数据库的联系(用数据源填充DataSet并解析更新)
DataAdapter对象的常用属性
DataAdapter对象的工作步骤一般有两种,一种是通过Command对象执行SQL语句,将获得的结果集填充到DataSet对象中;另一种是将DataSet里更新数据的结
果返回到数据库中。
DataAdapter对象的常用属性形式为 XXXCommand,用于描述和设置操作数据库。使用DataAdapter对象,可以读取、添加、更新和删除数据源中的记录。对于每
种操作的执行方式,适配器支持以下4个属性,类型都是Command,分别用来管理数据操作的“增”、“删”、“改”、“查”动作。
SelectCommand属性:该属性用来从数据库中检索数据。
InsertCommand属性:该属性用来向数据库中插入数据。
DeleteCommand属性:该属性用来删除数据库里的数据。
UpdateCommand属性:该属性用来更新数据库里的数据。
例如,以下代码能给DataAdapter对象的selectCommand属性赋值。
//连接字符串
SqlConnection conn;
//创建连接对象conn的语句
// 创建DataAdapter对象
SqlDataAdapter da = new SqlDataAdapter;
//给DataAdapter对象的SelectCommand属性赋值
Da.SelectCommand = new SqlCommand("select * fromuser", conn);
同样,可以使用上述方式给其他的InsertCommand、DeleteCommand和UpdateCommand 属性赋值。
当在代码里使用DataAdapter对象的 SelectCommand属性获得数据表的连接数据时,如果表中数据有主键,就可以使用CommandBuilder对象来自动为这个
DataAdapter对象隐形地生成其他3个InsertCommand、DeleteCommand和UpdateCommand 属性。这样,在修改数据后,就可以直接调用Update方法将修改后的数
据更新到数据库中,而不必再使用InsertCommand、 DeleteCommand和UpdateCommand这3个属性来执行更新操作。
【ADO.NET总结】
在对数据源执行操作时,可能会执行数据更新(增,删,改)操作或查询操作。对于查询操作可能存在两种情况:一是查询获得单个值,二是查询获得若干条记
录。
一.查询单个值
1.需要使用Command对象的ExecuteScalar()方法,步骤如下。
(1):创建Connection对象。
(2):拼写Sql查询语句。
(3):使用Sql语句和Connection对象创建Command对象
(4):打开数据库连接,调用Connection对象的Open()方法。
(5):调用Command对象的ExecuteScalar()方法,返回单个值。
(6):操作完成后关闭数据库连接,调用Connection对象的Close()方法。
二.查询若干条记录
2.需要使用Command对象的ExecuteReader()方法,步骤如下
(1):创建Connection对象。
(2):拼写Sql查询语句。
(3):使用Sql语句和Connection对象创建Command对象
(4):打开数据库连接,调用Connection对象的Open()方法。
(5):调用Command对象的ExecuteReader()方法,返回一个DataReader对象。
(6):在循环中(While循环比较方便)调用DataReader对象的Read()方法。逐行读取记录。若读到记录,则返回true;否则返回false。
(7):使用(type)DataReader对象[列名或索引]的方式读取这一行中某一列的值。
(8):调用DataReader对象的Close()方法,关闭DataReader对象。
(9):操作完成以后,关闭数据库连接,调用Connection对象的Close()方法。
三.数据更新操作
3.对数据库执行数据更新(增,删,改)操作时,都使用Command对象的ExecuteNonQuery()方法.步骤如下。
(1):创建Connection对象。
(2):拼写Sql增,删,改语句。
(3):使用Sql语句和Connection对象创建Command对象
(4):打开数据库连接,调用Connection对象的Open()方法。
(5):调用Command对象的ExecuteNonQuery()方法执行命令,返回数据库中受影响的行数。(-1:异常,int类型的返回值)
(6):操作完成后关闭数据库连接,调用Connection对象的Close()方法。
【Command对象的三种方法的对比如下所示】
【1】:ExecuteScalar()方法:执行查询(单个值)操作,并返回结果集中的第一行第一列。
【2】:ExecuteReader()方法:执行查询(若干值)操作,返回DataReader对象。(方法中可返回string类型的和
SqlDataReader对象作为返回值返回一个SqlDataReader对象)
【3】:ExecutenNonQuery()方法:执行增,删,改操作,返回受影响的行数(int类型-1:异常)。