ADO.NET的应用

目录

String类和StringBuilder

string类

StringBuilder类

StringBuilder类常用的属性

Stringbuilder类常用的方法

DataReader对象

DataReader对象的主要属性和主要方法

使用DataReader对象查询数据

DataAdapter对象和DataSet

3.1 数据适配器DataAdapter

3.2 临时数据仓库DataSet


String类和StringBuilder

string类

String name = "Amy";
name += "zhang";
Console.WriteLine(name);

StringBuilder类

stringBuilder类表示动态字符串,它与String类的字符串缓冲区类似

StringBuilder 对象名称 = new StringBuilder([val]);

其中val为可选参数,表示字符串初始值,还可以使用Stringbuilder类的方法进行赋值

StringBuilder类常用的属性

属性说明
Capacity获取或设置包含在当前对象所分配的内存中最大字符个数
Length获取或设置当前对象的长度

Stringbuilder类常用的方法

方法说明
StringBuilder Append(String values)给当前字符串追加一个字符串
Stringbuilder AppendFormat(string format,object arg(),object argl)追加特定格式的字符串
StringBuilder Insert(int index,string value)在当前字符串的指定位置中插入一个字符串
StringBuilder Replace(string oldValue,string new value)在当前字符串中,用某个字符全部替换另一个字符串
String Tostring()返回当前强制转换为String对象的字符串

使用Stringbuilder类对代码进行改造,代码如下

StringBuilder sb = new StringBuilder("Amy");
Sb.Append("zhang");
Console.WriteLine(sb.ToString());

运行代码,输出“Amy,zhang”.

DataReader对象

DataReader对象可以从数据源中读取只读、只进的数据流,每次从数据源中只提取一条记录

.NET数据提供程序及相应的DataReader类

.NET数据提供程序DataReader类命令空间
SQL Server数据提供程序SqlDataReaderSystem.Data.SqlClient
OLE DB数据提供程序OleDbDataReaderSystem.Data.OleDb
ODBC数据提供程序OdbcDataReaderSystem.Data.Odbc
Oracle数据提供程序OracleDataReaderSystem.Data.OracleClient

DataReader对象的主要属性和主要方法

属性说明
FiedCount获取当前行的列数
IsClosed判断当前对象是否已关闭。若值为true,则表示当前对象已关闭:否则,值为false
方法说明
Read()前进到下一行记录。若读到一条记录,则返回true;否则,返回false
Close()关闭DataReader对象

使用DataReader对象查询数据

DataReader对象中的数据是通过Command对象的ExecuteReader()方法得到的,所以,Dat ······ , Reader对象一般和Command一起使用。

使用DataReader对象查询BookDB数据库中图书信息表中的图书信息

(1)创建 Command对象 代码如下

string connString = "Data Source = ; Initial Catalog = BookDB; User ID = sa PWD = 12345";
Sqlconnection conn = new SqlConnection(connString);
conn.Open();
string sql = "select BName,BPrice,Bauthor from BookInfo";
sqlCommand comm = new sqlCommand(Sql,conn);

(2)调用Command对象的ExecuteReader()方法得到DataReader对象,代码如下

sqlDataReader reader = comm.ExecuteReader();

(3)调用DataReader对象提供的Read()方法逐行读取查询结果集中的记录,Read()方法返回值为布尔类型,若读取到记录,则返回true, 否则,返回false 代码如下

reader.Read();

(4)读取当前行中指定列的数据,通常,Read()方法会和循环结构结合使用,每次循环体内可以通过方括号类读取某列的值。方括号中可以是列的索引(从0开始),也可以是列名,代码如下

while(reader.Read()){
//读取读书名称
string bName = reader["BName"];
//或
String bName = reader[0];
}

(5)调用Close()方法,关闭DataReader对象

reader.Close();

下面根据上述步骤实现读取BookDB数据库中图书分类表数据的操作,并按格式输出显示在控制台上,代码如下

class Program
{
  static void Main(String[] args)
    {
    string connString = "Data Source = ; Initial Catalog = BookDB; User ID = sa PWD = 12345";
    Sqlconnection conn = new SqlConnection(connString);
    conn.Open();
    string sql = "select BName,BPrice,Bauthor from BookInfo";
    sqlCommand comm = new sqlCommand(Sql,conn);
    sqlDataReader reader = comm.ExecuteReader();
    StringBuilder SbOutPut = new StringBuilder();
    while(reader.Read())
    {
      string categoryCode = reader["categoryCode"].ToString();
      string categoryName = reader["categoryName"].ToString();
      SboutPut.AppendFormat("分类编号:{0}, 分类名称:{1}",categoryCode,categoryName);
      Console.WriteLine(SboutPut);
      SbOutPut.Length = 0;
   }
   reader.Close();
   conn.Close();
​
}
}

由代码可以看出,在循环结构中调用StringBuilder对象的AppendFormat()方法指定categoryCode 和 categoryName的显格式。与Console.WriteLine();方法相似,AppendFormat()方法可以指定两个参数,第一个参数是字符串格式说明符,第二个是需要格式化的对象组成的参数列表。

在上述代码中,首先调用Command的Execute Reader()方法从数据库中获取数据。的到DataReader对象;然后使用while循环调用Read()方法,显示图书信息。在实际开发过程中,操作数据库的代码和处理业务的代码一般是分开的。

DataAdapter对象和DataSet

3.1 数据适配器DataAdapter

.NET数据提供程序DataAdapter类命名空间
SQL server数据提供程序SqlDataAdapterSystem.Data.SqlClient
OLE DB数据提供程序OleDbDataAdapterSystem.Data.OleDb
ODBC数据提供程序OdbcDataAdapterSystem.Data.Odbc
Oracle数据提供程序OracleDataAdapterSystem.Data.OracleClient

(1)创建DataAdapter对象,代码如下

string connString = "Data Source = ; Initial Catalog = BookDB; User ID = sa PWD = 12345";
  SqlConnection connection = new SqlConnection(connString);
  connection.Open();
  SqlDataAdapter adapter = new SqlDataAdapter(select....//调用代码);

(2)创建DataSet对象,调用DataAdapter对象提供的Fill()方法,将数据从数据源加载到DataSet中,代码如下

DataSet ds = new DataSet();
adapter.Fill(ds);

3.2 临时数据仓库DataSet

DataSet是数据的脱机容器,是临时存储数据的仓库,它不包含数据库的概念。

如果想要获取DataSet的数据表,则可以通过Tables属性获取.

Tables : 获取DataSet中数据表集合,可以通过索引(从0开始)或数据表名获取指定数据表

1.Rows: 获取数据表中的数据集合,通过索引取值

2.Columns: 获取数据表中的数据集合,通过索引或列名取值

使用DataAdapter对象结合DataSet查询BookDB数据库中用户信息表中的用户信息,具体步骤如下

(1)创建Connection对象,并调用Open()方法打开连接,代码如下

string connString = "Data Source = ; Initial Catalog = BookDB; User ID = sa PWD = 12345";
  SqlConnection connection = new SqlConnection(connString);
  connection.Open();

(2)创建DataAdapter对象,代码如下

SqlDataAdapter adapter = new SqlDataAdapter(select....调用代码,connString);

(3)创建DataSet数据集对象,调用DataAdapter对象提供的Fill()方法,将数据从数据源加载到DataSer中,代码如下

DataSet ds = new DataSer();
adapter.Fill(ds);

(4)使用DataSet提供的属性获取数据表,并结合数据表属性获取具体值,代码如下

foreach(DataRow dr in ds.Tables[0].Rows)
{
string userName = dr["UserName"].ToString();
string gender = dr["Gender"].ToString();
}

(5)调用Close()方法,关闭Connection对象连接,代码如下

connection.Close();

使用DataAdapter对象查询借图书的用户姓名、图书名称和图书分类。并调用Fill()方法将数据填充到DataSer中,代码如下

class Program
{
  private const "string connString = "Data Source = ; Initial Catalog = BookDB; User ID = sa PWD = 123456";
  static void Main(string[] args)
  {
  SqlConnection conn = new SqlConnection(connString);
  tr{
     conn.Open();
     string sql = "select A.UserName,D.CategoryName,C.BName from UserInfo A inner join BorrowInfo B on A.UserId = B.UserId inner join BookInfo C on B.BId = C.BId inner join BookCategory D on C.CId = D.CategoryCode ";
     DataSet ds = new DataSet();
     SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
     adapter.Fill(ds);
     StringBuilder sbOutPut = new StringBuilder();
     foreach(DataRow dr in ds.Tables[0].Rows)
     {
     SbOutPut.AppendFormat("用户姓名:{0},分类名称:{1},书名:{2}",
            dr["UserName"].ToString(),dr["CategoryName"].ToString(),
            dr[BName].ToString());
            Console.WriteLine(SbOutPut);
            SbOutPut.Length = 0;
     
     }
  }
  catch(Exception){
  Console.WriteLine("发生异常!");
  }
  finally
  {
  //关闭数据库连接
  conn.Close();
  }
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值