Net编程 详解DataTable用法【转】

http://www.diybloghome.com/article/16.html

DataTable表示一个与内存有关的数据表,可以使用工具栏里面的控件拖放来创建和使用,也可以在编写程序过程中根据需要独立创建和使用,最常见的情况是作为DataSet的成员使用,在这种情况下就需要用在编程过程中根据需要动态创建数据表。

1 代码创建DataTable数据表
通过添加对象的方式直接在DataSet中创建数据表,可以通过使用Add方法将DataTable添加到DataSet中,这种是使用控件的可视化添加DataTable的操作,那么在代码中怎么来创建DataTable数据表呢?
在程序中创建DataTable对象可以使用相应的DataTable构造函数。创建一个表名为TableName的数据表,实现代码如下所示:

  1. DataTable NewTable = new DataTable(TableName);

另外也可以通过以下方法创建DataTable对象:使用DataAdapter对象的Fill方法或FillSchema方法在DataSet中创建,这种方式都用于与数据库相连接操作的情况下。实现代码如下所示:

  1. //数据库联接字符串
  2. string connectionString =
  3. "Data Source=local;Initial Catalog=Northwind;Integrated Security=True;UserID=sa;Password=";
  4. //sql语句查询
  5. string commandString = "Select * from Customers";
  6. // 创建SqlDataAdapter对象,并执行sql命令
  7. SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);
  8. //创建数据集dataSet
  9. DataSet dataSet = new DataSet();
  10. //把数据表添加到数据集中
  11. DataTable dataTable = dataSet.Tables("Customers");
  12. //将数据填充到数据集中
  13. dataAdapter.Fill(dataSet,"Customers");

注意:将一个DataTable作为成员添加到一个DataSet的Tables集合中后,不能再将其添加到任何其他DataSet的表集合中。
使用DataTable构造函数初次创建DataTable时,是没有架构(即结构,没有列)的。没有架构的DataTable数据表示没有办法使用的,因此要在使用这种DataTable数据表之前要定义表的架构,必须创建DataColumn对象并将其添加到表的Columns集合中。如何使用代码创建Columns列,将在本章后面几节中讲到。
创建DataTable时,不需要为TableName属性提供值,可以在其他时间指定该属性,或者将其保留为空,这些都不影响DataTable的使用。应该注意的是在将一个没有TableName值的表添加到DataSet中时,该表会得到一个从“Table”(表示Table0)开始递增的默认名称TableN。
以下示例创建DataTable对象的实例,并为其指定名称“Customers”。 实现代码如下所示:

  1. DataTable workTable = new DataTable("Customers");

以下代码是将创建的DataTable实例Customers表添加到DataSet的Tables集合中。实现代码如下所示:

  1. DataSet customers = new DataSet();
  2. DataTable customersTable = customers.Tables.Add("CustomersTable");

或者

  1. DataSet customers = new DataSet();
  2. DataTable customersTable = new DataTable(“Customers”)
  3. customers.Tables.Add(Customers);

2 用编程方式添加DataTable列
前面已经学过使用代码创建DataTable,但是使用DataTable构造函数初次创建
DataTable时,是没有架构(即结构,没有列)的。要定义表的架构,必须创建DataColumn
对象并将其添加到表的Columns集合中。也可以为表定义主键列,并且可以创建Constraint约束对象并将其添加到表的Constraints约束集合中。
DataColumn类型表示了DataTable上的一列。总的来说,绑定到某个DataTable的所有DataColumn类型的集合就表示一个表。
DataTable包含了由表的Columns属性引用的DataColumn对象的集合。这个列的集合与任何约束一起定义表的架构(即结构)。
通过使用DataColumn构造函数,或者通过调用表的Columns属性的Add方法,可在表内创建DataColumn对象。Add方法将接受可选的ColumnName、DataType参数,并将创建新的DataColumn作为集合的成员。它还会接受现有的DataColumn对象并会将其添加到集合中,并会根据请求返回对所添加的DataColumn的引用。
以下示例向DataTable中添加了四列。实现代码如下所示:

  1. DataTable workTable = new DataTable("Customers");
  2. DataColumn workCol = workTable.Columns.Add("CustID");
  3. workTable.Columns.Add("CustLName");
  4. workTable.Columns.Add("CustFName");
  5. workTable.Columns.Add("Purchases");

代码说明:

CustID,CustLName,CustFName,Purchases:数据表Customers中的列名。

3 设置DataTable数据表的主键
数据库开发的一个通常规则就是表至少得有一个列作为主键。主键约束用于惟一标识给定表中的一条记录(行)。假设现在需要新建一个DataColumn列来表示EmpID字段并且要将这个列将作为表的主键,它必须有AllowDBNull和Unique属性,实现代码如下所示:

  1. DataTable workTable = new DataTable("Customers");
  2. DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32));
  3. workCol.AllowDBNull = false;
  4. workCol.Unique = true;
  5. workTable.Columns.Add("CustLName", typeof(String));
  6. workTable.Columns.Add("CustFName", typeof(String)));
  7. workTable.Columns.Add("Purchases", typeof(String)));

代码说明:
示例中用于CustID列的属性设置为不允许DBNull值并将值约束为唯一。但是,如果将CustID列定义为表的主键列,AllowDBNull属性就会自动设置为false,并且Unique属性会自动设置为true。

4 设置列的数据类型
通过上面8.4.2节的学习已经知道怎么向新建的数据表中添加列了,那么下面来看一看,怎么为添加的列设置列的数据类型。数据类型是标明一列数据的数据类型属性,根据不同的需要可以在DataTable数据表中建立不同的列,并可以为不同的列设置不同的数据类型,来满足需要。继续上面Customers表的例子,为创建的列添加数据类型:
实现代码如下所示:

  1. //创建一个数据表Customers
  2. DataTable CustomersTable = new DataTable("Customers");
  3. //创建一个Int32类型名称是CustID列,把这个列设置成主键,并且不允许为空,
  4. DataColumn CustomersCol = CustomersTable.Columns.Add("CustID", typeof(Int32));
  5. CustomersCol.AllowDBNull = false;
  6. CustomersCol.Unique = true;
  7. //创建三个String类型的列CustLName,CustFName,Purchases
  8. CustomersTable.Columns.Add("CustLName", typeof(String));
  9. CustomersTable.Columns.Add("CustFName", typeof(String)));
  10. CustomersTable.Columns.Add("Purchases", typeof(String)));

代码说明:
示例中用于CustID列定义为表的主键列。CustID列指定的数据类型是Int32,CustLName列、CustFName列、Purchases列指定的数据类型都是String的列,当然也可以不设置列的数据类型,在这个时候DataColumn的DataType属性默认为字符串类型,当然可以根据需要在创建列名时进行列数据类型的设置。

5 启用Autoincrementing字段
在8.4.4节中学会了如何设置DataColumn列的数据类型,在设置完DataColumn列的数据类型以后,也可以像SQL-Server数据库表一样把某一列设置成自动递增的。简单地说,自动增加列可以确保当一个新行被添加到给定表时,可以基于当前的递增步长值自动指定这个列的值。特别是某一列作为没有重复值得主键的时候,这个功能就特别有用。在DataTable中这个功能可以用AutoIncrement(列是否将列的值自动递增)、AutoIncrementSeed(起始值,种子值)和AutoIncrementStep(步长)属性来控制。
下面是创建一个支持自动递增的DataColumn列的例子。种子值用于标记列的起始值,步长值表示递增时增加种子值的数值,代码如下所示:

  1. // 创建一个新列
  2. DataColumn myColumn = new DataColumn();
  3. myColumn.ColumnName = " CustID ";
  4. myColumn.DataType = System.Type.GetType("System.Int32");
  5. // 设置自动递增
  6. myColumn.AutoIncrement = true;
  7. myColumn.AutoIncrementSeed = 0;
  8. myColumn.AutoIncrementStep = 1;

代码说明:
AutoIncrement:列是否将列的值自动递增,true表示自动递增,false表示不能自动递增。
AutoIncrementSeed:起始值种子值,AutoIncrement属性设置为true的列的起始值。
AutoIncrementStep:步长,递增量,AutoIncrement属性设置为true的列的步长。
创建一个数据类型为Int32的CustID列,为了能使这个字段的值实现自动增加的效果,把列AutoIncrement属性设置为true;把列得种子值AutoIncrementSeed定为0,也就是从0开始计数;同时设置自动增加的步长AutoIncrementStep为1,每次增加一个。由于种子值被定为0,前面5个值应该是0、1、2、3和4。
可以往一个DataTable中添加这个DataColumn来测试一下。然后往这个表中添加一些新行,当然会自动转储CustID列中的值,代码如下所示:

  1. //实现列自动增加功能
  2. protected void Button1_Click(object sender, EventArgs e)
  3. {
  4. //创建一个新的数据列,名称:CustID ,数据类型:Int32.
  5. DataColumn myColumn = new DataColumn();
  6. myColumn.ColumnName = " CustID ";
  7. myColumn.DataType = System.Type.GetType("System.Int32");
  8. //把新创建的列设置自动增加,种子为0,增加步长为1.
  9. myColumn.AutoIncrement = true;
  10. myColumn.AutoIncrementSeed = 0;
  11. myColumn.AutoIncrementStep = 1;
  12. //把这个列添加到Customers表中.
  13. DataTable CustomersTable = new DataTable("Customers");
  14. myTable. CustomersTable.Add(myColumn);
  15. //添加20个新行.
  16. DataRow r;
  17. for (int i = 0; i < 20; i++)
  18. {
  19. r = CustomersTable.NewRow();
  20. CustomersTable.Rows.Add(r);
  21. }
  22. //显示每一行的数据值.
  23. string temp = "";
  24. DataRowCollection rows = CustomersTable.Rows;
  25. for (int i = 0; i < CustomersTable.Rows.Count; i++)
  26. {
  27. DataRow currRow = rows;
  28. temp += currRow["CustID "] + " ";
  29. }
  30. //在Label1面显示所有值
  31. Label1.Text = Label1.Text+temp;
  32. }

如果把上面代码写在建立的Web程序中,运行后点击“Button”按钮,就会得出初始值为0的步长为1的一系列数,

6 用编程方式添加DataTable行
在为DataTable定义了架构之后,也就是设置好了需要的列名以后,就可以可通过将DataRow对象添加到表的Rows集合中来将数据行添加到表中。与添加DataColumn类似,同样可以通过使用DataRow构造函数,或者通过调用表的Rows属性的Add方法,可在表内创建DataRow对象。
DataColumn对象集合表示了表的模式(Schema)。DataTable通过内部的DataColumnCollection类型保存表中所有列。相反,DataRow类型集合就表示表中的实际数据。这样,如果Customers表中有10个记录,就可以使用10个DataRow类型来表示它们。使用DataRow类的成员可以对表中的值进行插入、删除、求值和操作操作。
创建一个DataRow数据行的对象,实现代码如下所示:

  1. //创建一个Customers数据表
  2. DataTable CustomersTable = new DataTable("Customers ");
  3. //创建一个新的数据行
  4. DataRow arow = CustomersTable.NewRow();
  5. //设置行的值
  6. arow[ColumnName] = DataValue;
  7. //把数据行添加创建的Customers数据表中
  8. CustomersTable.Rows.Add(arow);

功能说明:
新建一行arow,

并给这行某一个列名付值为DataValue,最后把这一行添加到Customers表中。使用DataRow与使用DataColumn有些不同,因为不可以直接创建这个类型的实例,而是获得一个来自给定DataTable的引用。例如,假设想往Customers表中添加新行,DataTable.NewRow()方法可以获得下一空位,然后在上面填充每列的数据。
实现代码如下所示:

  1. //创建一个数据表
  2. DataTable CustomersTable = new DataTable("Customers");
  3. //声明数据表的行和列变量
  4. DataColumn column;
  5. DataRow row;
  6. //创建一个新列,设置列的数据列性和列名,并把这个新列添加到Customers表中
  7. column=new DataColumn();
  8. column.DataType = System.Type.GetType("System.Int32");
  9. column.ColumnName = " CustID ";
  10. CustomersTable.Columns.Add(column);
  11. //再创建一个新列
  12. column = new DataColumn();
  13. column.DataType = Type.GetType("System.String");
  14. column.ColumnName = " CustLName ";
  15. CustomersTable.Columns.Add(column);
  16. //创建新的一行并把这个行添加到Customers表中
  17. for(int i = 0; i < 10; i++)
  18. {
  19. row = CustomersTable.NewRow();
  20. row["CustID "] = i;
  21. row["CustLName "] = "item " + i.ToString();
  22. CustomersTable.Rows.Add(row);
  23. }

功能说明:
向CustomersTable表创建两个列分别是CustID, CustLName,然后用循环的方式产生10行并附值,添加到CustomersTable表中。

7 操作DataTable:更新行
在前面一节里面讲了,怎么样添加一个DataRow行,那么下面需要了解的关于DataTable的另一个方面就是怎样用新值更新已有的DataRow行。下面开始介绍关于DataTable更新行的问题。
最常使用的一个方法就是先用Select()方法获得符合给定过滤条件的行。一旦获得这些DataRow,就对它们作相应的修改。例如,假定有一个新按钮在被单击后,搜索DataTable中所有EmployeeID列值为5的行。一旦标识这些项后,就可以把EmployeeID列对应值5改为6。实例代码如下:

  1. //数据库联接字符串
  2. string connectionString =
  3. "Data Source=local;Initial Catalog=Northwind;Integrated Security=True;UserID=sa;Password=";
  4. //sql语句把Orders表中的数据信息都取出来
  5. string commandString = "Select * from Orders";
  6. SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);
  7. DataSet dataSet = new DataSet(   );
  8. //填充数据集
  9. dataAdapter.Fill(dataSet," Orders");
  10. //填充数据表
  11. DataTable dataTable = dataSet.Tables("Orders");
  12. // 建立一个用于过滤出EmployeeID列值为5的行的行的变量
  13. string filterStr = "EmployeeID=5";
  14. string strEmployeeID = null;
  15. // 查询出来所有EmployeeID列值为5的行.
  16. DataRow[] EmployeeID= dataTable.Select(filterStr);
  17. // EmployeeID列对应值5改为6
  18. for(int i = 0; i < EmployeeID.Length; i++)
  19. {
  20. DataRow temp = EmployeeID ;
  21. strEmployeeID += temp["EmployeeID "] = 6;
  22. EmployeeID = temp;
  23. }

8 用编程方式删除DataTable行
用于从DataTable对象中删除DataRow对象的方法有两种:DataRowCollection对象的 Remove方法和DataRow对象的Delete方法。
Remove方法和Delete方法都可以将DataTable的行DataRow删除,但是前者是从DataRowCollection中删除DataRow,而后者只将行标记为删除。当应用程序调用AcceptChanges方法时,才会发生实际的删除。通过使用Delete,可以在实际删除之前先以编程方式检查哪些行标记为删除。如果将行标记为删除,其RowState属性会设置为Deleted。
在将DataSet或DataTable与DataAdapter和关系型数据源一起使用时,用DataRow的

Delete方法移除行。Delete方法只是在DataSet或DataTable中将行标记为Deleted,而不会移除它。而DataAdapter在遇到标记为Deleted的行时,会执行其DeleteCommand方法以在数据源中删除该行。然后,就可以用AcceptChanges方法永久移除该行。如果使用Remove
删除该行,则该行将从表中完全移除,但DataAdapter不会在数据源中删除该行。
DataRowCollection的Remove方法采用DataRow作为参数,并将其从集合中移除,实现代码如下所示:

  1. DataTable CustomersTable = new DataTable("Customers ");
  2. DataRow workRow = empTable.NewRow();
  3. CustomersTable.Rows.Remove(workRow);

作为对比,以下示例演示了如何调用DataRow上的Delete方法来将其RowState改为Deleted。实现代码如下所示:

  1. DataTable CustomersTable = new DataTable("Customers ");
  2. DataRow workRow = empTable.NewRow();
  3. workRow.Delete();

如果将行标记为删除,并且调用DataTable对象的AcceptChanges方法,该行就会从DataTable中移除。相比之下,如果调用RejectChanges,行的RowState就会恢复到被标记为Deleted之前的状态。

9 向DataTable填充数据
ADO.NET中的DataSet是数据的内存驻留表示形式,它提供了独立于数据源的一致关系编程模型。DataSet表示整个数据集,其中包含表、约束和表之间的关系。由于DataSet独立于数据源,DataSet可以包含应用程序本地的数据,也可以包含来自多个数据源的数据。与现有数据源的交互通过DataAdapter来控制。
DataAdapter的SelectCommand属性是一个Command对象,用于从数据源中检索数据。DataAdapter的InsertCommand、UpdateCommand和DeleteCommand属性也是Command对象,用于按照对DataSet中数据的修改来管理对数据源中数据的更新。
DataAdapter的Fill方法用于使用DataAdapter的SelectCommand的结果来填充DataSet。Fill将要填充的DataSet和DataTable对象(或要使用从SelectCommand中返回的行来填充的DataTable的名称)作为它的参数。
Fill方法使用DataReader对象来隐式地返回用于在DataSet中创建表的列名称和类型以及用于填充DataSet中的表行的数据。表和列仅在不存在时才创建;否则,Fill将使用现有的DataSet架构。
以下代码示例使用SqlDataAdapter对象获取Microsoft SQL Server Northwind数据库的数据填充到Customers数据集中的Customers表。
实现代码如下所示:

  1. //使用DataAdapter的Fill方法向Customers表中填充数据
  2. string connectionString =
  3. "Data Source= local;Initial Catalog=Northwind;Integrated Security=True; UserID=sa;Password=";
  4. string commandString = "Select * from Customers";
  5. SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);
  6. DataSet customers = new DataSet();
  7. dataAdapter.Fill(customers, "Customers");

10 在DataTable实现类似sql语句的查询功能
在脱离数据库的DataSet实现类似sql语句的查询。
也就是(select ... from tablename where ...)这样的功能。
将从DataSet中查询出来的数据以行的形式保存到arow中。
实现代码如下所示:

  1. DataSet ds= new DataSet();
  2. DataRow[] arow = ds.Tables[TableName].Select("" + ColumnsName+ "=‘" + DataValue + "‘");

代码说明:
TableName:数据集ds中的表名。
ColumnsName:TableName表中的某一列名。
DataValue:和列名对应参数的值。
功能说明:
上面语句功能相当于sql语句中的查询语句

  1. Select * From TableName where ColumnsName= DataValue

11 DataTable中数据记录的统计
在使用数据库时例如SQL-Server、Oracle这些数据库,可以轻松的通过统计和计算函数例如Sum、Aver、Count等统计或计算出相关结果,那么,在已经把数据检索出来的DataTable数据集中能否同样使用呢?在程序中根据需要动态创建的DataTable是没有办法使用sql语句进行查询统计的,例如没有办法使用Select语句来获取查询统计结果。那么在DataTable中怎么来进行统计呢?

本节将介绍一个简单的方法,可以轻松的获得DataTable中的记录统计结果。这个简单的方法就是调用功能强大的DataTable的函数Compute。
函数如下:

  1. public object Compute(string expression,string filter)

参数说明:
qexpression 参数需要聚合函数,要计算的表达式字符串,基本上类似于Sql Server中的统计表达式。例如,以下是合法表达式:Count(ID)。
qfilter:统计的过滤字符串,只有满足这个过滤条件的记录才会被统计,也就是确定在表达式中使用哪些行。
以下示例,以SQL-Server数据库中的Northwind数据库中的Orders数据表,描述订单信息,包含字段为:订单号(OrderID)、客户编号(CustomerID)、职工编号(EmployeeID)、订货时间(OrderDate)、船号(ShipVia)、运费(Freight)。
1.统计所有职工编号EmployeeID为5的数量:

  1. table.Compute("Count(*)","EmployeeID=5");

2.统计所有运费Freight中运费大于100的个数

  1. table.Compute("Count(*)","Freight>100‘");

3.统计运费Freight的平均值

  1. table.Compute("Aver(Freight)","true");

4.统计职工编号EmployeeID为5的运费总额:

  1. table.Compute("Sum(Freight)"," EmployeeID=5");

以上都是计算每一列的合计,那么要添加一行求合计可以使用下面的方法:

  1. //创建一个数据集
  2. DataSet customers = new DataSet();
  3. //在数据集中添加一个名称为CustomersTable的数据表
  4. DataTable customersTable = customers.Tables.Add("CustomersTable");
  5. //创建一个新行并添加到CustomersTable数据表中
  6. DataRow dataRow = new DataRow();
  7. dataRow= customersTable.NewRow();
  8. //然后就是统计了,声明连个int 变量i:循环变量, colCnt: customersTable表中的列数
  9. int i ;
  10. int colCnt ;
  11. colCnt = customersTable.Cols.Count;
  12. for( i=0 ;i< colCnt -1;i++)
  13. //求第i列的和并且结果赋值给新的dataRow数据行
  14. dataRow(i)= customersTable.Compute("Sum("+i.ToString()+")","true");
  15. //把数据行添加到customersTable数据表中
  16. customersTable.Rows.Add(dataRow);

12 DataTable和xml的一些应用总结
在ASP.NET2.0中ADO.NET和XML结合的很紧密,第7章中已经详细介绍了在ADO.NET中的数据通过DataSet很容易存取在XML中的,那么在DataTable能像在DataSet中那样操作XML数据文件吗?答案是可以的,下面就是一个将DataTable中的数据写入到XML文件中去的操作,实例代码如下所示:

  1. //创建一个Customers数据表
  2. DataTable dt = new DataTable("Customers");
  3. //添加两列CustID,CustLName数据类型分别为Int32,String,并添加到数据表中
  4. DataColumn dc1 = new DataColumn("CustID", Type.GetType("System.Int32"));
  5. DataColumn dc2 = new DataColumn("CustLName", Type.GetType("System.String"));
  6. dt.Columns.Add(dc1);
  7. dt.Columns.Add(dc2);
  8. //利用循环创建数据行并赋值,添加到数据表中
  9. for (int i = 0; i < al.Count; i++)
  10. {
  11. DataRow dr = dt.NewRow();
  12. DS_Option dso = (DS_Option)al;
  13. dr["CustID"] = dso.ID;
  14. dr["CustLName"] = dso.Name;
  15. dt.Rows.Add(dr);
  16. }
  17. //将数据表中的数据写入到XML文件中
  18. string xmlstr;
  19. System.IO.StringWriter writer = new System.IO.StringWriter();
  20. dt.WriteXml(writer);
  21. xmlstr = writer.ToString();
  22. return xmlstr;

有了向XML文件写数据的操作,当然也可以从XML文件中读取数据信息到DataTable数据表中,方法累也类似,但要先建立好打DataTable的结构,不然会出错。
实例代码如下所示:

    1. string tbxml = xmlinfo;
    2. DataTable dt = new DataTable("Customers ");
    3. DataColumn dc1 = new DataColumn("CustID", Type.GetType("System.Int32"));
    4. DataColumn dc2 = new DataColumn("CustLName", Type.GetType("System.String"));
    5. dt.Columns.Add(dc1);
    6. dt.Columns.Add(dc2);
    7. System.IO.StringReader reader = new System.IO.StringReader(tbxml);
    8. dt.ReadXml(reader);
时间: 2024-10-05 07:11:51

Net编程 详解DataTable用法【转】的相关文章

Qt Quick 之 QML 与 C++ 混合编程详解

Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可用,要么用起来不方便,所以呢,很多时候我们是会基于这样的原则来混合使用 QML 和 C++: QML 构建界面, C++ 实现非界面的业务逻辑和复杂运算. 请给

Java多线程编程详解

线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问. 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块. 1. synchronized 方法:通过在方法声明中加入 synch

ORACLE PL/SQL编程详解

ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点.本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的

windows批处理(cmd/bat)编程详解

reference: http://blog.csdn.net/bingjie1217/article/details/12947327 http://www.cnblogs.com/doit8791/archive/2012/05/20/2511001.html 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多.cmd文件只有在windo

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不

[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下) ——通过知识共享树立个人品牌. 继上六篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程之四:把游标说透(

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) ——通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之