您的位置:首页 > 数据库

ADO.net操作数据库总结

2010-04-22 10:17 399 查看

ADO.net操作数据库总

ADO.net操作数据库总结
一.用SqlConnection连接SQL Server
1..加入命名空间
using System.Data.SqlClient;
2.连接数据库
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = "user id=sa;password=sinofindb;initial catalog=test;data source=127.0.0.1;Connect Timeout=30";
myConnection.Open();
改进(更通用)的方法:
string MySqlConnection="user id=sa;password=sinofindb;Database =test;data source=127.0.0.1;Connect Timeout=30";
SqlConnection myConnection = new SqlConnection(MySqlConnection);
myConnection.Open();
二。用OleDbConnection连接
1.加入命名空间
using System.Data.OleDb;
2.连接sql server
string MySqlConnection="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=test;Integrated Security=SSPI;";
SqlConnection myConnection = new SqlConnection(MySqlConnection);
myConnection.Open();
3.连接Access(可通过建立.udl文件获得字符串)
string MySqlConnection="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:db2000.mdb;
Persist Security Info=False;
4.连接Oracle(也可通过OracleConnection连接)
string MySqlConnection="Provider=MSDAORA;Data Source=db; user id=sa;password=sinofindb";
三.创建Command对象
1.SqlCommand 构造函数
①初始化 SqlCommand 类的新实例。
public SqlCommand();
SqlCommand myCommand = new SqlCommand();
②初始化具有查询文本的 SqlCommand 类的新实例。public SqlCommand(string);
String mySelectQuery = "Select * FROM mindata";
SqlCommand myCommand = new SqlCommand(mySelectQuery);
③初始化具有查询文本和 SqlConnection 的SqlCommand类实例。
Public SqlCommand(string, SqlConnection);
String mySelectQuery = "Select * FROM mindata";
string myConnectString = "user id=sa;password=;database=test;server=mySQLServer";
SqlConnection myConnection = new SqlConnection(myConnectString);
SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection);
④初始化具有查询文本、SqlConnection 和 Transaction 的 SqlCommand 类实例。
public SqlCommand(string, SqlConnection, SqlTransaction);
SqlTransaction myTrans = myConnection.BeginTransaction();
String mySelectQuery = "Select * FROM mindata";
string myConnectString = "user id=sa;password=;database=test;server=mySQLServer";
SqlConnection myConnection = new SqlConnection(myConnectString);
SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection, myTrans);
2.建立SqlCommand与SqlConnection的关联。
myCommand.Connection = myConnection;
或者:SqlCommand myCommand = myConnection.CreateCommand;
3.设置SqlCommand的查询文本。
myCommand.CommandText = "Select * FROM mindata";
或者第2种构造:SqlCommand myCommand = new SqlCommand(mySelectQuery);
给SqlCommand对象提供两个查询字符串,每个查询字符串访问不同的表,返回不同的结果集。两个查询语句用分号分隔。
4. 执行命令。
ExecuteReader
返回一行或多行
ExecuteNonQuery
对 Connection 执行 Transact-SQL 语句并返回受影响的行数(int)
ExecuteScalar
返回单个值(如一个聚合值).返回结果集中第一行的第一列。忽略额外的列或行
ExecuteXmlReader
将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。
SqlDataReader myReader = myCommand.ExecuteReader();
或SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
while(myReader.Read()) //循环读取数据
{
Console.WriteLine(myReader.GetString(0));// 获取指定列的字符串形式的值
Console.WriteLine(myReader. GetValue(1));// 获取以本机格式表示的指定列的值
}
CommandText = "select count(*) as NumberOfRegions from region";
Int count = (int) myCommand.ExecuteScalar();
关于OleDbCommand对象的使用。
四.DataReader的使用
1.遍历结果集
while (myReader.Read())
Console.WriteLine("tt", myReader.GetInt32(0), myReader.GetString(1));
myReader.Close();
2.使用序数索引器。
while (myReader.Read())
Console.WriteLine("tt", myReader[0].ToString(), myReader[1].ToString());
myReader.Close();
3.使用列名索引器。
while (myReader.Read())
Console.WriteLine("tt", myReader["code"].ToString(), myReader["name"].ToString());
myReader.Close();
4.使用类型访问器。
public char GetChar(int i); 获取指定列的单个字符串形式的值
public DateTime GetDateTime(int i); 获取指定列的 DateTime 对象形式的值
public short GetInt16(int i); 获取指定列的 16 位有符号整数形式的[C#]
public string GetString(int i); 获取指定列的字符串形式的值
ADO.net基本名词解释与学习记录(一)
 数据的规范化:是把数据尽可能的分解到多个表上,最小化重复相同数据的次数。
  ADO.net的主要对象元素:
  数据源:通常指的是一个关系数据库,如SQLserver等
  托管的数据供应程序:提供数据仓库通信的功能 如ODBC等
  Connection对象:建立一个页面程序与数据库驱动的通信管道
  Command对象:一个包含读写数据指令的工具
  DataReader/DataSet对象:存储已读出或写入数据的地方
  .Net控件:主要指< asp:datagrid>
  Connection对象:主要用于连接数据源
  通过Open()方法打开连接字符串中的连接
  连接字符串包含3各部分的信息:
  >> 第一部分指定要使用的供应程序或驱动程序的种类 //server=localhost
  >> 第二部分指定要使用的数据库   //database=Mydatabase
  >> 第三部分通常包含安全信息,包括用户名,密码等 //uid=foolboy;pwd=Mypasswd
  
  Command对象和DataReader:读取和修改数据
  Command用法:
  objCommand = new OleDbCommand(strSQL,objConnection);
  objDbDataReader = objCommand.ExecuteReader();
  DataReader:存储数据
  读取方法 DataReader["FIELD"]
  
  数据绑定:
  是在数据源和数据使用者创建一个连接的过程。
  主要是指绑定到DataGrid上
  DataReader的局限:
  >> 只能读取数据,不能修改数据
  >> 只能向前循环数据
  >> 只能处理一个表的数据
  DataSet是他的替代品还是DataTable??他们的主要区别?
  
  DataSet和DataTable对象
  DataSet表示数据库中的数据,与DataReader不同它可以存储几个表和他们之间的关系。
  在使用表示主要要用到下面4各对象:
  >> DataTable: 表示表本身
  >> DataSet: 核心对象,建立多表之间的adhoc关系,可以一表中的一行和另一表的一行关联起来
  >> DataAdapter: 用于结果从Connection传给Dataset。Fill()方法把数据拷贝到DataSet中, Update()方法把DataSet中的数据烤回数据源。
  >> DataView: 表示DataSet中存储的DataTables的特定视图
  >> DataGrid: 等的DataSource最终只绑定到某具体DataView上
  
  ADO.net关于SQL Server的对象
  sqlConnection
  sqlCommand
  sqlDataAdapter
  数据异常处理
  常见问题:
  >> 代码包含对不存在的ADO.NET对象的引用
  >> 代码请求的数据为NULL不存在
  >> 代码的连接字符串错误
  >> 包含不存在的列或表的引用
  >> 没有提供正确的UserID和Password
  >> 代码是用语法不正确的SQl语句
  >> 网络问题导致数据库连接问题
  处理方法:
  利用 try ....catch 捕获错误信息
  更新数据方法
  问题:
  >> 如何更新?我们的修改都是基于断开连接的,如果将修改后的结果写入数据库中?
  >> 如何处理同步更新?两个人先后对更新了同一数据,怎么办?结果会被覆盖么?
  DataSet & DataTable & DataRow关系如下所示:
 --------------------------------------
   |      DataSet         |
   |   |-------------------------|  |
   |   |   DataTable      |  |
   |   |             |  |
   |   |   |----------------| |  |
   |   |   |  DataRow   | |  |
   |   |   |----------------| |  |
   |   |   |  DataRow   | |  |
   |   |   |----------------| |  |
      |   |-------------------------|  |
   |------------------------------------|
  DataTable = DataSet.Tables["TName"];
  DataRow = DataTable.Rows;
  string strFirstName = DataRow[0]["FirstName"];
  
  这里的更新的实质都是对数据集DataSet的更新方法,没有涉及到对数据源的更新
  更新操作思路:
  1.添加记录 (添加行)
  添加记录首先需要声明两个变量 DataTable ,DataRow
  其中DataTable需要实例化到具体的数据集中的某个table
  DataRow = DataTable.NewRow() 声明为Table的新Row
  再对DataRow进行赋值,调用DataTable.Rows.Add(DataRow)即可
  2.修改纪录 (编辑行)
  首先声明一个变量 DataRow[] objRows用来存储要编辑的行
  objRows = DataTable.Select("查询条件");
  如果是一行,可以这样 objRows = DataTable.Rows[3];
  再对其进行修改 如 objRows[0][FIELD1]="" objRows[0][FIELD2]=""
  3.删除纪录
  如下 DataTable.Rows[5].Delete();
  推想:应该可以这样,首先申明一个变量 DataRow[] objRows 用来存储要删除的行
  objRows = DataTable.Select("查询条件");
ADO.net基本名词解释与学习记录(二)
  更新数据源的方法
  1,Command对象
  更新需要的属性:
  Connection  包含数据仓库连接的细节
  CommandText  要运行的命令
  CommandType  命令的类型 Sql字符或存储过程的名称
  Text  表示文本字符串sql
  TableDirect 表示表名
  StoredProcedure 表示存储过程的名称
  Parameters  Parameters对象的一个集合
  
  2,DataAdapter对象
  注意DataAdapter和Command的区别?
  >> Command主要用于运行命令
  >> DataAdapter主要用于为多个命令提供一个存储空间,在数据仓库和DataSet之间提供  双向交互。
  哦,一个Command对象只能处理查询,添加,删除,修改中的一种
  因此 DataAdapter用四个属性存储四种Command对象属性如下 SelectCommand,UpdateCommand,InsertCommand,DeleteCommand
  
  3,CommandBuilder对象
  OleDbCommandBuilder objBuilder
  objBuilder = new OleDbCommandBuilder(DataAdapter)
  表示告诉命令生成器可以在哪儿取到SelectCommand,以建立其他的命令.
  
  DataAdapter.UpdateCommand = objBuilder.GetUpdateCommand();
  DataAdapter.InsertCommand = objBuilder.GetInsertCommand();
  DataAdapter.DeleteCommand = objBuilder.GetDeleteCommand();
  
  注意在这种情况下,SelectCommand必需带有一个主键字段
  
  4.DataAdapter.Update()
  
  DataAdapter.Update(DataSet,"Tablesname");
  
  例如,以下代码确保首先处理表中已删除的行,然后处理已更新的行,然后处理已插入的行。
  [C#]
  DataTable updTable = custDS.Tables["Customers"];
  
  // First process deletes.
  custDA.Update(updTable.Select(null, null, DataViewRowState.Deleted));
  
  // Next process updates.
  custDA.Update(updTable.Select(null, null, DataViewRowState.ModifiedCurrent));
  
  // Finally, process inserts.
  custDA.Update(updTable.Select(null, null, DataViewRowState.Added));
  
  其中DataViewRowState数据视图的操作属性 包括Deleted, ModifiedCurrent,Added,Unchanged等
  
  至此,更新数据仓库工作完成。
  
  使用存储过程
  存储过程类似于代码中的函数,它存储在数据服务器上并有一个名称。
  为什么要使用存储过程?
  1.庞大复杂的SQL语句影响程序代码的阅读
  2.由数据库服务器来处理的存储过程比直接使用SQL语句更快,效率更高
  
  要使用存储过程,需要注意的是CommandType设为StoredProccess CommandText为存储过程的名称
  
  eg: objCmd.CommandText = "[Sales by Category]";
  objCmd.CommandType = CommandType.StoreProcedure;
  
  使用XML
  由于ADO.net设计时就考虑到了XML,它处理XML数据就像是这些数据来自于一个数据库
  
  1,写入XML文件
  objAdapter.Fill(objDataSet,"Employees"); //填充结果集
  objDataSet.WriteXml(Server.MapPath("Employees.xml"));//写入到xml文件
  注意两点:
  1,首先用到了DataSet的WriteXml()方法,从DataSet中提取信息并格式化xml
  2,Server.MapPath()表示生成文件路径,指向当前应用程序的目录
  2,读取XML文件
  objDataSet.ReadXml(Server.MapPath("Employees.xml"));
  
  3,将Xml转换为字符串
  string strXML,strSchema
  strXML = objDataSet.GetXml()
  strSchema = objDataSet.GetXmlSchema()
  4,一旦XML读入到DataSet中他就同从数据库中读入的数据没有任何区别,也可以进行前面任何的操作,最终只要将操作的结果集DataSet写入至XML或者数据库都可以
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: