目录
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数据提供程序 | SqlDataReader | System.Data.SqlClient |
OLE DB数据提供程序 | OleDbDataReader | System.Data.OleDb |
ODBC数据提供程序 | OdbcDataReader | System.Data.Odbc |
Oracle数据提供程序 | OracleDataReader | System.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数据提供程序 | SqlDataAdapter | System.Data.SqlClient |
OLE DB数据提供程序 | OleDbDataAdapter | System.Data.OleDb |
ODBC数据提供程序 | OdbcDataAdapter | System.Data.Odbc |
Oracle数据提供程序 | OracleDataAdapter | System.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();
}
}
}