整理了一些在以前的学习中关于ADO.NET在C#中的应用的一些知识点,一是为了复习,二是能够和大家一起分享。
应用程序调用数据库数据的层次关系:
Program -> ADO.Net -> Data Provider -> Database
典型的Access数据库连接字符串
string.Format("Provider = {0};Data Source = {1}{2}",
"Microsoft.Jet.OLEDB.4.0",
System.AppDomain.CurrentDomain.BaseDirectory,
"数据库名.mdb");
典型的Sql Server数据库连接字符串
string.Format("Server={0};Database={1};{2}",
"localhost",
"数据库名",
"Integrated Security=SSPI"); //第三个参数为Sql Server的验证模式,IntegratedSecurity=SSPI为整合Windows验证,也可以使用"的形式
几种数据库的访问方式:
ExecuteReader() 只能一行一行向前读,并且连接一直保持着,除非使用dataReader.Close()关闭它
示例:典型的生成一个OleDbDataReader的过程:
//1、定义连接字符串
string connString = string.Format("Provider = {0};Data Source = {1}{2}",
"Microsoft.Jet.OLEDB.4.0",
System.AppDomain.CurrentDomain.BaseDirectory,
"数据库名.mdb");
//2、建立OleDbConnection数据库连接对象,并将此连接打开
OleDbConnection myConn = null;
myConn = System.Data.OleDb.OleDbConnection(connString);
myConn.Open();
//3、建立一个OleDbCommand对象
string sqlString = "Select ... From ... ...";
OleDbCommand myCmd = new System.Data.OleDb.OleDbCommand(sqlString,myConn);
//4、建立一个OleDbDataReader对象,通过myCmd的ExecuteReader()方法。
OleDbDataReader myReader = null;
myReader = myCmd.ExecuteReader();
//5、遍历myReader
while (myReader.Read()) // 逐个读行数据...
{
//
//读取myReader中的数据
//
}
DataSet 面向非连接的,把数据库内容全部Copy到DataSet里面,并且
好处:
关闭对数据库的连接,可以方便地工作
减轻服务器的负担
一个DataSet中可以存很多很多的表
坏处:
容易产生并发冲突
示例:
string sql;
sql = "Select * From tableName";
//1、建立Command
System.Data.SqlClient.SqlCommand myCmd = new System.Data.SqlClient.SqlCommand(sql, myConn);
//2、建立适配器
System.Data.SqlClient.SqlDataAdapter myDA = new System.Data.SqlClient.SqlDataAdapter(myCmd);
//3、建立DataSet
System.Data.DataSet myDataSet;
myDataSet = new System.Data.Dataset();
myConn.Open();
myDA.Fill(myDataSet);//DataAdapter在这里起到了桥梁的作用,填充之后,就可以关闭数据库连接了
myConn.Close();
//4、提出myDataSet中相关表的数据
foreach(System.Data.Row row in myDataSet.Tables["tableName"].Rows)
{
...//逐行读出数据表中数据
...//使用row["ColumnName"].ToString()来读取该行中某列的数据
}
ExecuteScalar() 面向连接的,读取数据库中一个值,例如返回数据表中有多少记录,只使用Count读出,高效。
示例:
string = sql;
sql = string.Format("Select selectedColumn From myTable Where , ID);
System.Data.SqlClient.SqlCommand dbCmd;
dbCmd = new System.Data.SqlClient.SqlCommand(sql,myConn)
string testStr;
testStr = System.Convert.ToString(dbCmd.ExecuteScalar());
ExecuteNonQuery() 面向连接的,可写的。
示例:
string sql;
int rows;
sql = string.Format("Delete From tableName Where ,ID);
System.Data.SqlClient.SqlCommand myCmd = new System.Data.SqlClient.SqlCommand(sql, myConn);
myConn.Open();
rows = myCmd.ExecuteNonQuery();
if (rows != 1) throw new System.ApplicationException("删除失败?!");
应用程序调用数据库数据的层次关系:
Program -> ADO.Net -> Data Provider -> Database
典型的Access数据库连接字符串
string.Format("Provider = {0};Data Source = {1}{2}",
"Microsoft.Jet.OLEDB.4.0",
System.AppDomain.CurrentDomain.BaseDirectory,
"数据库名.mdb");
典型的Sql Server数据库连接字符串
string.Format("Server={0};Database={1};{2}",
"localhost",
"数据库名",
"Integrated Security=SSPI"); //第三个参数为Sql Server的验证模式,IntegratedSecurity=SSPI为整合Windows验证,也可以使用"的形式
几种数据库的访问方式:
ExecuteReader() 只能一行一行向前读,并且连接一直保持着,除非使用dataReader.Close()关闭它
示例:典型的生成一个OleDbDataReader的过程:
//1、定义连接字符串
string connString = string.Format("Provider = {0};Data Source = {1}{2}",
"Microsoft.Jet.OLEDB.4.0",
System.AppDomain.CurrentDomain.BaseDirectory,
"数据库名.mdb");
//2、建立OleDbConnection数据库连接对象,并将此连接打开
OleDbConnection myConn = null;
myConn = System.Data.OleDb.OleDbConnection(connString);
myConn.Open();
//3、建立一个OleDbCommand对象
string sqlString = "Select ... From ... ...";
OleDbCommand myCmd = new System.Data.OleDb.OleDbCommand(sqlString,myConn);
//4、建立一个OleDbDataReader对象,通过myCmd的ExecuteReader()方法。
OleDbDataReader myReader = null;
myReader = myCmd.ExecuteReader();
//5、遍历myReader
while (myReader.Read()) // 逐个读行数据...
{
//
//读取myReader中的数据
//
}
DataSet 面向非连接的,把数据库内容全部Copy到DataSet里面,并且
好处:
关闭对数据库的连接,可以方便地工作
减轻服务器的负担
一个DataSet中可以存很多很多的表
坏处:
容易产生并发冲突
示例:
string sql;
sql = "Select * From tableName";
//1、建立Command
System.Data.SqlClient.SqlCommand myCmd = new System.Data.SqlClient.SqlCommand(sql, myConn);
//2、建立适配器
System.Data.SqlClient.SqlDataAdapter myDA = new System.Data.SqlClient.SqlDataAdapter(myCmd);
//3、建立DataSet
System.Data.DataSet myDataSet;
myDataSet = new System.Data.Dataset();
myConn.Open();
myDA.Fill(myDataSet);//DataAdapter在这里起到了桥梁的作用,填充之后,就可以关闭数据库连接了
myConn.Close();
//4、提出myDataSet中相关表的数据
foreach(System.Data.Row row in myDataSet.Tables["tableName"].Rows)
{
...//逐行读出数据表中数据
...//使用row["ColumnName"].ToString()来读取该行中某列的数据
}
ExecuteScalar() 面向连接的,读取数据库中一个值,例如返回数据表中有多少记录,只使用Count读出,高效。
示例:
string = sql;
sql = string.Format("Select selectedColumn From myTable Where , ID);
System.Data.SqlClient.SqlCommand dbCmd;
dbCmd = new System.Data.SqlClient.SqlCommand(sql,myConn)
string testStr;
testStr = System.Convert.ToString(dbCmd.ExecuteScalar());
ExecuteNonQuery() 面向连接的,可写的。
示例:
string sql;
int rows;
sql = string.Format("Delete From tableName Where ,ID);
System.Data.SqlClient.SqlCommand myCmd = new System.Data.SqlClient.SqlCommand(sql, myConn);
myConn.Open();
rows = myCmd.ExecuteNonQuery();
if (rows != 1) throw new System.ApplicationException("删除失败?!");