Microsoft Word - 第9章 ASP.NET操作数据库.doc
|
|
|
- 亘赠 葛
- 9 years ago
- Views:
Transcription
1 第 9 章 ASP.NET 操作数据库 通过对 ADO.NET 的基本讲解, 以及讲解了一些数据源控件的基本用法后, 本章将介绍一些 ASP.NET 操作数据库的高级用法, 包括使用 SQLHelper 以及数据源控件对数据的操作 本章是对前面的数据库知识的一种补充和提升 9.1 使用 ADO.NET 操作数据库 上一章中介绍了 ADO.NET 的基本概念 ADO.NET 的对象, 以及如何使用 ADO.NET 使用 ADO.NET 能够极大地方便了开发人员对数据库进行操作而无需关心数据库底层之间的运行 ADO.NET 不仅包括多个对象, 同样包括多种方法 这些方法都可以用来执行开发人员指定的 SQL 语句, 但是这些方法实现过程又不尽相同, 本节将介绍 ADO.NET 中数据的操作方法 使用 ExecuteReader() 操作数据库 使用 ExecuteReader() 操作数据库,ExecuteReader() 方法返回的是一个 SqlDataReader 对象或 OleDbDataReader 对象 当使用 DataReader 对象时, 不会像 DataSet 那样提供无连接的数据库副本 DataReader 类被设计为产生只读 只进的数据流 这些数据流都是从数据库返回的 所以, 每次的访问或操作只有一个记录保存在服务器的内存中 相对于 DataSet 而言,DataReader 具有较快的访问能力, 并且能够使用较少的服务器资源 DataReader 对象提供了 游标 形式的读取方法 当从结果中读取了一行, 则 游标 会继续读取到下一行 通过 Read 方法可以判断数据是否还有下一行 如果存在数据, 则继续运行并返回 true, 否则返回 false 示例代码如下所示 SqlConnection con = new SqlConnection(str); string strsql = "select * from mynews"; //SQL 查询语句 SqlCommand cmd = new SqlCommand(strsql, con); // 初始化 Command 对象 SqlDataReader rd = cmd.executereader(); // 初始化 DataReader 对象 while (rd.read()) Response.Write(rd["title"].ToString()); // 通过索引获取列 DataReader 可以提高执行效率, 有两种方式可以提高代码的性能 : 第一种是基于序号的查询 ; 第二种情况则是使用适当的 Get 方法来查询 一般来说, 在数据库的设计中, 需
2 第 9 章 ASP.NET 操作数据库要设计索引键或主键来标识 在主键的设计中, 自动增长类型是经常使用的, 自动增长类型通常为整型, 所以基于序号的查询可以使用 DataReader 示例代码如下所示 // 设置连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "select * from mynews where id=1 order by id desc"; // 按标识查询 SqlCommand cmd = new SqlCommand(strsql, con); // 创建 Command 对象 SqlDataReader rd = cmd.executereader(); // 创建 DataReader 对象 while (rd.read()) // 遍历数据库 Response.Write(rd["title"].ToString()); // 读取相应行的信息 当使用 ExecuteReader() 操作数据库时, 会遇到知道某列的名称而不知道某列的号的情况 这种情况可以通过使用 DataReader 对象的 GetOrdinal() 方法获取相应的列号 此方法接收一个列名并返回此列名所在的列号, 示例代码如下所示 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "select * from mynews where id=1 order by id desc"; // 创建执行 SQL 语句 SqlCommand cmd = new SqlCommand(strsql, con); // 创建 Command 对象 SqlDataReader rd = cmd.executereader(); // 创建 DataReader 对象 int id = rd.getordinal("title"); // 使用 GetOrdinal 方法获取 title 列的列号 while (rd.read()) // 遍历 DataReader 对象 Label1.Text = " 新闻 id 是 " + rd["id"]; // 输出对象的值 当完成数据库操作时, 需要关闭数据库连接,DataReader 对象在调用 Close() 方法时关闭与数据库的连接 如果在没有关闭之前又打开另一个连接, 系统会抛出异常 示例代码如下所示 rd.close(); // 关闭 DataReader 对象 ExecuteReader() 可以执行相应的 SQL 语句, 例如插入 更新以及删除等 当需要执行插入 更新或删除时, 可以使用 ExecuteReader() 进行数据操作 示例代码如下所示 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "insert into mynews values (' 执行更新后的标题 ')"; // 创建执行 SQL 语句 SqlCommand cmd = new SqlCommand(strsql, con); // 创建 Command 对象 SqlDataReader rd = cmd.executereader(); // 使用 ExcuteReader() 方法 while (rd.read()) // 读取数据库 Response.Write(rd["title"].ToString() + "<hr/>"); 271
3 ASP.NET 开发技术大全 rd.close(); Response.Redirect("ExecuteReader.aspx"); // 关闭 DataReader 对象 当执行了插入 删除等数据库操作时,ExecuteReader 返回为空的 DataReader 对象 当使用 Read 方法遍历读取数据库时, 并不会显示相应的数据信息, 因为不是查询语句, 则返回一个没有任何数据的 System.Data.OleDb.OleDbDataReader 类型的集 (EOF), 但是 ExecuteReader() 方法可以执行 SQL 语句 如图 9-1 所示 图 9-1 ExecuteReader() 执行查询和事务处理使用 ExecuteReader() 操作数据库, 通常情况下是使用 ExecuteReader() 进行数据库查询操作, 使用 ExecuteReader() 查询数据库能够提升查询效率 而如果需要进行数据库事务处理,ExecuteReader() 方法并不是理想的选择 使用 ExecuteNonQuery() 操作数据库 使用 ExecuteNonQuery() 操作数据库时,ExecuteNonQuery() 并不返回 DataReader 对象, 返回的是一个整型的值, 代表执行某个 SQL 语句后, 在数据库中影响的行数 示例代码如下所示 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "select top 5 * from mynews order by id desc"; SqlCommand cmd = new SqlCommand(strsql, con); // 使用 ExecuteNonQuery Label1.Text=" 该操作影响了 "+cmd.executenonquery()+" 行 ";// 执行 SQL 语句并返回行上述代码使用了 SELECT 语句, 并执行语句, 返回受影响的行数 运行后, 发现返回的结果为 1, 说明, 当使用 SELECT 语句时, 并没有对任何行有任何影响 ExecuteNonQuery() 272
4 第 9 章 ASP.NET 操作数据库 通常情况下为数据库事务处理的首选, 当需要执行插入 删除 更新等操作时, 首选 ExecuteNonQuery() 对于更新 插入和删除的 SQL 句,ExecuteNonQuery() 方法的返回值为该命令所影响的行数 对于 CREATE TABLE 和 DROP TABLE 语句, 返回值为 0, 而对于所有其他类型的语句, 返回值为 1 ExecuteNonQuery() 操作数据时, 可以不使用 DataSet 直接更改数据库中的数据, 示例代码如下所示 protected void Button1_Click(object sender, EventArgs e) // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "delete from mynews where id>4";// 编写执行删除的 SQL 语句 SqlCommand cmd = new SqlCommand(strsql, con); // 创建 Command 对象 Label1.Text = " 该操作影响了 " + cmd.executenonquery() + " 行 "; // 返回影响行数 运行上述代码后, 会执行删除 id 号大于 4 的数据事务 当执行删除并删除完毕后, 则 ExecuteNonQuery() 方法返回受影响的行数, 如图 9-2 所示 图 9-2 ExecuteNonQuery() 方法 ExecuteNonQuery() 操作主要进行数据库操作, 包括更新 插入和删除等操作, 并返回相应的行数 在进行数据库事务处理时或不需要 DataSet 为数据库进行更新时, ExecuteNonQuery() 方法是数据操作的首选 因为 ExecuteNonQuery() 支持多种数据库语句的执行 注意 : 有些项目中, 通过判断 ExecuteNonQuery() 的返回值来判断 SQL 语句是否执行成功 这样是有失偏颇的, 因为当使用创建表的语句时, 就算执行成功也会返回 使用 ExecuteScalar() 操作数据库 ExecuteScalar() 方法也用来执行 SQL 语句, 但是 ExecuteScalar() 执行 SQL 语句后的返回值与 ExecuteNonQuery() 并不相同,ExecuteScalar() 方法的返回值的数据类型是 Object 类型 如果执行的 SQL 语句是一个查询语句 (SELECT), 则返回结果是查询后的第一行的 273
5 ASP.NET 开发技术大全 第一列 如果执行的 SQL 语句不是一个查询语句, 则会返回一个未实例化的对象, 必须通过类型转换来显示 示例代码如下所示 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "select * from mynews order by id desc"; SqlCommand cmd = new SqlCommand(strsql, con); Label1.Text = " 查询出了 Id 为 " + cmd.executescalar() \; // 使用 ExecuteScalar 查询 通常情况下,ExecuteNonQuery() 操作后返回的是一个值, 而 ExecuteScalar() 操作后则会返回一个对象 ExecuteScalar() 经常使用于当需要返回单一值时的情况 例如当插入一条数据信息时, 常常需要马上知道刚才插入的值, 则可以使用 ExecuteScalar() 方法 示例代码如下所示 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "insert into mynews values (' 刚刚插入的 id 是多少?') as 'bh'"; // 插入语句 SqlCommand cmd = new SqlCommand(strsql, con); // 执行语句 Label1.Text = " 刚刚插入的行的 id 是 " + cmd.executescalar();// 返回赋值 上述代码使用了 语法获取刚刚执行更新后的 id 值, 然后通过使用 ExecuteScalar() 方法来获取刚刚更新后第一行第一列的值 使用 ExecuteXmlReader() 操作数据库 ExecuteXmlReader() 方法用于操作 XML 数据库, 并返回一个 XmlReader 对象, 若需要使用 ExecuteXmlReader() 方法, 则必须添加引用 System.Xml XmlReader 类似于 DataReader, 都需要通过 Command 对象的 ExecuteXmlReader() 方法来创建 XmlReader 的对象并初始化, 示例代码如下所示 XmlReader xdr = cmd.executexmlreader(); // 创建 XmlReader 对象 274 ExecuteXmlReader() 返回 XmlReader 对象,XmlReader 特性如下所示 XMLReader 是面向流的, 它把 XML 文档看作是文本数据流 XMLReader 是一个抽象类 XMLReader 使用 pull 模式处理流 3 个派生类 :XMLTextReader XMLNodeReader 和 XMLValidatingReader 下面代码实现了获取当前节点中属性的个数 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "select * from mynews order by id desc FOR XML AUTO, XMLDATA";
6 第 9 章 ASP.NET 操作数据库 SqlCommand cmd = new SqlCommand(strsql, con); XmlReader xdr = cmd.executexmlreader(); Response.Write(xdr.AttributeCount); // 创建 Command 对象 // 创建 XmlReader 对象 // 读取节点个数 上述代码使用了 SQL 语言中的 FOR XML AUTO, XMLDATA 关键字 当执行 ExecuteXmlReader() 方法时, 会返回 XmlReader 对象, 若不指定 FOR XML AUTO, XMLDATA 关键字, 则系统会抛出异常 9.2 ASP.NET 创建和插入记录 在数据库操作中, 经常需要对数据库中的内容进行插入操作 例如当有一个用户发布了评论, 或者一个用户要购买某个商品, 都需要插入记录来保存用户的相应的信息, 以便当用户再次登录网站或应用时, 能够及时获取自己购买的信息 SQL INSERT 数据插入语句 使用 SQL INSERT 语句能够实现数据库的插入,SQL 语句必须遵照一些规范 SQL INSERT 语句的一般语法形式如下所示 INSERT [INTO] table_name [(column_list)] VALUES(DEFAULT NULL expression [,...n]) 上述代码规范了 INSERT 语句的编写规范 INSERT 是 SQL 插入关键字 [INTO] 是表名称之前能够包含的可选关键字 Table_name 是相关的表名称 column_list 是列的集合, 如果有多个列可用都好隔开 VALUES 是相应的列的值 如果需要向表 mytables 插入数据, 而 mytables 里包括自动增长的主键 id 和 title 两列, 则 INSERT 语句可以编写为如下代码 INSERT INTO mytables VALUES (' 新的新闻标题 ') 上述代码向表 mytables 中插入了一条新记录, 并将 title 赋值为 新的新闻标题 值得注意的是, 在这条语句中, 并没有编写列的集合 因为当不编写 column_list 时, 则默认为每一个列插入数值 注意 : 自动增长的主键类型的字段, 无需向数据中插入数值, 因为 SQL Server 会自动为该列赋值 275
7 ASP.NET 开发技术大全 如果需要当插入数据时, 需要指定插入相应的列的值, 则可以将 SQL 语句代码编写如下 INSERT INTO mytables (title) VALUES (' 新的新闻标题 ') 上述代码指定了列 title, 并对应了相应的值 若在表中存在多个列, 列的顺序和列相应的值的顺序必须匹配 例如有 3 列并分别为 number1 string2 和 datetime3 当需要向其中插入数据时, 则可以编写以下 SQL 语句 INSERT INTO examtable (number1,string2,datetime3) VALUES (1,'this is a string','2008/9/18') 上述代码编写了 INSERT 语句以便数据的插入 同样在插入语句中, 如果需要插入所有的列, 可以简化 INSERT 语句以便快速进行数据插入 示例代码如下所示 INSERT INTO examtable VALUES (1,'this is a string','2008/9/18') 值得注意的是, 无论按照何种方法编写 SQL 语句, 值和列都应该相互匹配 使用 Command 对象更新记录 编写了 SQL 语句后, 必须执行 SQL 语句 在 ADO.NET 中, 执行 SQL 语句有很多方法, 其中推荐使用 Command 命令的 ExecuteNonQuery 执行 SQL 语句的命令的必要步骤如下所示 (1) 打开数据连接 (2) 创建一个新的 Command 对象 (3) 定义一个 SQL 命令 (4) 执行 SQL 命令 (5) 关闭连接 从上面的步骤可以发现, 执行 SQL 语句是非常容易的, 首先必须要打开到数据库的连接, 示例代码如下所示 SqlConnection con = new SqlConnection(str); // 创建连接对象 其中,str 是数据连接字串, 用来初始化 Connection 对象, 说明如何连接数据库 当数据库连接完毕后, 可以使用 Open 方法打开数据连接 完成数据库连接后, 需创建一个新的 Command 对象, 示例代码如下所示 SqlCommand cmd = new SqlCommand("insert into mynews value (' 插入一条新数据 ')", con); Command 对象的构造函数的参数有两个, 一个是需要执行的 SQL 语句, 另一个是数据库连接对象 创建 Command 对象后, 就可以执行 SQL 命令, 执行完成后并关闭数据连接, 示例代码如下所示 cmd.executenonquery(); con.close(); // 执行 SQL 命令 // 关闭连接 276
8 第 9 章 ASP.NET 操作数据库上述代码使用了 ExecuteNonQuery() 方法执行了 SELECT 语句的操作 当执行完毕后就需要对现有的连接进行关闭, 以释放系统资源 使用 DataSet 数据集插入记录 使用 INSERT 语句能够完成数据插入, 使用 DataSet 对象也可以完成数据插入 为了将数据库的数据填充到 DataSet 中, 则必须先使用 DataAdapter 对象的方法实现填充 当数据填充完成后, 开发人员可以将记录添加到 DataSet 对象中, 然后使用 Update 方法将记录插入数据库中 使用 DataSet 更新记录的步骤如下所示 (1) 创建一个 Connection 对象 (2) 创建一个 DataAdapter 对象 (3) 初始化适配器 (4) 使用数据适配器的 Fill 方法执行 SELECT 命令, 并填充 DataSet (5) 使用 DataTable 对象提供的 NewRow 方法创建新行 (6) 将数据行的字段设置为插入的值 (7) 使用 DataRowAdd 类的 Add 方法将数据行添加到数据表中 (8) 把 DataAdapter 类的 InsertCommand 属性设置成需要插入记录的 INSERT 语句 (9) 使用数据适配器提供的 Update 方法将新记录插入数据库 (10) 使用 DataSet 类提供的 AcceptChanges 方法将数据库与内存中的数据保持一致 当使用 DataSet 插入记录前, 需要创建 Connection 对象以保证数据库连接 示例代码如下所示 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 上述代码创建了一个数据库连接, 并打开了数据库连接 完成数据连接后, 就需要查询表中的数据并使用 DataAdapter 对象初始化适配器 示例代码如下所示 string strsql = "select * from mynews"; // 编写 SQL 语句 SqlDataAdapter da = new SqlDataAdapter(strsql, con); // 创建适配器 DataAdapter 对象默认构造函数包括两个参数, 其中一个参数是需要执行的 SQL 语句, 另一个是 Connection 对象 在初始化适配器后, 需要对适配器的相应的属性做设置, 使用 SqlCommandBuilder 对象可以让系统构造 InsertCommand 属性, 示例代码如下所示 SqlCommandBuilder build = new SqlCommandBuilder(da); // 构造 SQL 语句使用适配器的 Fill 方法能够填充 DataSet 数据集, 示例代码如下所示 DataSet ds = new DataSet(); // 创建数据集 da.fill(ds, "datatable"); // 填充数据集 DataTable tb = ds.tables["datatable"]; // 创建表 tb.primarykey = new DataColumn[] tb.columns["id"] ;// 创建表的主键上述代码创建了一个 DataSet 数据集对象 被填充数据后, 数据集中表的名称被命名 277
9 ASP.NET 开发技术大全 为 datatable, 该命名与数据库中的表的名称并不冲突 填充了 DataSet 数据对象后, 需要使用 DataRow 对象为 DataSet 添加数据 示例代码如下所示 DataRow row = ds.tables["datatable"].newrow(); row["title"] = " 使用 DataSet 插入新行 "; row["id"] = "15"; // 创建 DataRow // 赋值新列 上述代码使用了 NewRow 方法创建新行返回 DataRow 对象 当 DataRow 对象中的相应的元素被赋值后, 则需要使用 Rows.Add 方法增加新行, 因为只对 DataRow 对象赋值, 并不能自动地在数据库中增加新行 示例代码如下所示 ds.tables["datatable"].rows.add(row); // 添加新行 上述代码将数据更新到 DataSet 数据集中 为了保持数据集中的数据和数据库的数据的一致性, 需使用 Update 方法 示例代码如下所示 da.update(ds, "datatable"); // 更新数据 当执行了 Update 方法后, 数据库中的数据就会同步 DataSet 数据集中的数据进行数据更新 9.3 ASP.NET 更新数据库 在应用程序的开发中, 常常会需要对数据库中现有的内容进行更新操作 ADO.NET 提供了若干不同的更新数据库中记录的方法 如果需要更新数据库中的某列的值或者某几列的值, 则需要使用 SQL UPDATE 命令进行数据库更新 SQL UPDATE 数据更新语句 使用 SQL UPDATE 语句能够实现数据库中数据的更新 SQL UPDATE 语句的一般语法格式如下所示 UPDATE table_name SET column1_name=expression1, column2_name=expression2,.. columnn_name=expressionn WHERE condition1 AND OR condition2 上述代码规范了 UPDATE 语句的编写规范 UPDATE 是 SQL 更新关键字 table_name 是需要更新的表的名称 columnn_name 是需要更新的列的名称 expression 是列相应的值 278
10 第 9 章 ASP.NET 操作数据库 WHERE 是 SQL 语句关键字 condition 是条件 如果需要更新表 mytable 中的某行的数据, 则可以编写 SQL UPDATE 语句进行更新 示例代码如下所示 UPDATE mytable SET title=' 修改后的数据 ' where id=3 上述代码更新了 id 为 3 的数据中的 title, 并将 title 字段的值修改为 修改后的数据 使用 Command 对象更新记录 如需要执行 UPDATE 语句时, 同样可以使用 Command 对象执行语句 Command 对象基本上能够执行所有需要进行数据更新的 SQL 语句 使用 Command 对象进行数据库操作的步骤基本如下所示 (1) 创建数据库连接 (2) 创建一个 Command 对象, 并指定一个 SQL UPDATE( 或存储过程 ) (3) 使用 Command 对象的 ExecuteNonQuery() 方法执行 UPDATE( 或存储过程 ) (4) 关闭数据库连接 当需要执行 UPDATE 语句时, 首先必须要打开到数据库的连接, 打开连接后, 使用 Command 对象执行 SQL 语句, 示例代码如下所示 SqlConnection con = new SqlConnection(str); // 创建连接对象 其中,str 同样是数据连接字串, 用来初始化 Connection 对象, 说明如何连接数据库, 当数据库连接完毕后, 可以使用 Open 方法打开数据连接 完成数据库连接后, 需创建一个新的 Command 对象进行数据更新, 示例代码如下所示 SqlCommand cmd = new SqlCommand("UPDATE mynews SET title=' 修改后的数据 ' where id=3", con); // 创建 Command 对象 Command 对象的构造函数的参数有两个, 一个是需要执行的 SQL 语句, 另一个是数据库连接对象 创建 Command 对象后, 就可以执行 SQL 命令, 执行后完成并关闭数据连接, 示例代码如下所示 cmd.executenonquery(); con.close(); // 执行 SQL 命令 // 关闭连接 上述代码使用了 ExecuteNonQuery() 方法进行 SQL UPDATE 语句的执行, 从而能够更新数据库中的相应数据 使用 DataSet 数据集更新记录 ADO.NET 的 DataSet 对象提供了更好的编程实现数据库的更新功能 因为 DataSet 对象与数据库始终不是连接的, 开发人员可以向脱离数据库的 DataSet 对象中增加列 删除 279
11 280 ASP.NET 开发技术大全 列或更新列 当完成了修改后, 则可以通过将 DataSet 对象连接到 DataAdapter 对象来将记录传输给数据库 DataSet 更新记录的步骤如下所示 (1) 创建一个 Connection 对象 (2) 创建一个 DataAdapter 对象 (3) 初始化适配器 (4) 使用数据适配器的 Fill 方法执行 SELECT 命令, 并填充 DataSet (5) 执行 SqlCommandBuilder 方法生成 UpdataCommand 方法 (6) 创建 DataTable 对象并指定相应 DataSet 中的表 (7) 创建 DataRow 对象并查找需要修改的相应行 (8) 更改 DataRow 对象中的列的值 (9) 使用 Update 方法进行数据更新 在更新记录前, 首先需要查询出相应的数据, 查询相应的数据后才能够填充 DataSet 示例代码如下所示 // 创建连接字串 SqlConnection con = new SqlConnection(str); // 创建连接对象 string strsql = "select * from mynews"; // 执行查询 SqlDataAdapter da = new SqlDataAdapter(strsql, con); // 使用 DataAdapter DataSet ds = new DataSet(); // 使用 DataSet da.fill(ds, "datatable"); // 使用 Fill 方法填充 DataSet 上述代码将查询出来的数据集保存在表为 datatable 的 DataSet 记录集中 DataSet 记录集的表的名称可以按照开发人员的喜好来编写, 从而区分内存中表的数据和真实的数据库的区别 当需要处理数据时, 只需要处理相应名称的表即可 示例代码如下所示 DataTable tb = ds.tables["datatable"]; 当需要执行更新时, 可直接使用 DataSet 对象进行更新操作来修改其中的一行或多行记录 示例代码如下所示 DataTable tb = ds.tables["datatable"]; tb.primarykey = new DataColumn[] tb.columns["id"] ; DataRow row = tb.rows.find(1); row["title"] = " 新标题 "; 当需要更新某个记录时, 必须在更新之前查找到该行的记录 可以使用 Rows.Find 方法查找到相应的行, 然后将数据集表中该行的列值进行更新 使用 DataAdapter 的 Update 方法可以更新 DataSet 数据集, 并保持数据集和数据库中数据的一致性 示例代码如下所示 da.update(ds, "datatable"); 在执行以上代码, 可能会抛出异常 当传递具有已修改行的 DataRow 集合时, 更新要求有效的 UpdateCommand 这是因为在更新时, 并没有为 DataAdapter 对象配置 UpdateCommand 方法 可以通过 SqlCommandBuilder 对象配置 UpdateCommand 方法, 示例代码如下所示
12 第 9 章 ASP.NET 操作数据库 SqlCommandBuilder build = new SqlCommandBuilder(da); 上述代码为 DataAdapter 对象自动配置了 UpdateCommand DeleteCommand 等方法, 当执行更新时, 无需手动配置 UpdateCommand 方法 9.4 ASP.NET 删除数据 当数据库中的数据过多, 或需要对数据库进行数据优化时, 则可能需要对数据库中的数据进行删除 例如用户的操作以及长期不上线的用户资料, 都可以删除 ADO.NET 提供多种数据库的删除方法, 并且同样支持 DataSet 方法删除数据库 SQL DELETE 数据删除语句 使用 SQL DELETE 语句能够实现数据库中数据的更新 SQL DELETE 语句的一般语法格式如下所示 DELETE [FROM] table_name [WHERE condition1 AND OR condition2] 上述代码规范了 DELETE 语句的编写规范 DELETE 是 SQL 删除关键字 FORM 是一个可以选择的关键字 table_name 是表的名称 WHERE 是一个 SQL 关键字 conditionn 是执行 DELETE 命令中需要达成的若干条件 SQL DELETE 相对来说比较简单, 当需要对某个表中的数据进行删除时, 可以使用 DELETE 语句来执行删除操作 在编写 DELETE 语句时, 需要指定表, 并且指定相应的条件 示例代码如下所示 DELETE FROM mynews WHERE ID=3 上述代码指定删除了 mynews 表中 ID 为 3 的行 如果不编写 WHERE 子句, 则该表中所有的行都能够达成删除的条件, 则会删除表中所有的行 示例代码如下所示 DELETE FROM mynews 在编写删除语句时, 可以通过编写相应的条件来提高执行的效率 使用 Command 对象删除记录 当需要执行删除语句, 可以使用 Command 对象来删除数据库中的记录 Command 对象的使用方法在前面的 SQL 语句介绍中已经讲的比较多了 在删除记录时, 其使用方法基本相同 使用 Command 对象进行数据库操作的步骤基本如下所示 (1) 创建数据库连接 281
13 ASP.NET 开发技术大全 (2) 创建一个 Command 对象, 并指定一个 SQL DELETE( 或存储过程 ) (3) 使用 Command 对象的 ExecuteNonQuery() 方法执行 DELETE( 或存储过程 ) (4) 关闭数据库连接 当需要执行 DELETE 语句时, 首先必须要打开到数据库的连接 打开连接后, 使用 Command 对象执行 SQL 语句, 示例代码如下所示 SqlConnection con = new SqlConnection(str); 完成数据库连接后, 需创建一个新的 Command 对象 示例代码如下所示 SqlCommand cmd = new SqlCommand("Delete mynews where id=3", con); Command 对象的构造函数的参数有两个, 一个是需要执行的 SQL 语句, 另一个是数据库连接对象 创建 Command 对象后, 就可以执行 SQL 命令, 执行后完成并关闭数据连接, 示例代码如下所示 cmd.executenonquery(); con.close(); // 执行 SQL 命令 // 关闭连接 使用 DataSet 数据集删除记录 使用 DataSet 删除记录和使用 DataSet 更新记录非常的相似,DataSet 删除记录的步骤如下所示 (1) 创建一个 Connection 对象 (2) 创建一个 DataAdapter 对象 (3) 初始化适配器 (4) 使用数据适配器的 Fill 方法执行 SELECT 命令, 并填充 DataSet (5) 执行 SqlCommandBuilder 方法生成 UpdataCommand 方法 (6) 创建 DataTable 对象并指定相应的 DataSet 中的表 (7) 创建 DataRow 对象并查找需要修改的相应行 (8) 使用 Delete 方法删除该行 (9) 使用 Updata 方法进行数据更新 在删除记录前, 首先需要创建连接, 示例代码如下所示 SqlConnection con = new SqlConnection(str); string strsql = "select * from mynews"; 上述代码创建了与数据库的连接, 并编写 SQL 查询语句来填充 DataSet 填充 DataSet 对象需使用 DataAdapter, 示例代码如下所示 SqlDataAdapter da = new SqlDataAdapter(strsql, con); SqlCommandBuilder build = new SqlCommandBuilder(da); DataSet ds = new DataSet(); 282
14 da.fill(ds, "datatable"); 第 9 章 ASP.NET 操作数据库 编写完成后, 需要创建 DataTable 对象对 DataSet 中相应的数据进行操作 其代码和更新记录基本相同, 示例代码如下所示 DataTable tb = ds.tables["datatable"]; tb.primarykey = new DataColumn[] tb.columns["id"] ; DataRow row = tb.rows.find(3); 在进行删除之前, 同样需要找到相应的行来指定删除语句所需要删除的行 示例代码如下所示 row.delete(); 读者可以看到,DataSet 删除方法与更新方法不同的地方操作语句不同 在更新中使用的是 Update 方法, 而在删除中使用的是 Delete() 方法 注意 : 当使用 Delete 方法删除记录行的时候, 可以通过调用 DataRow 对象的 RejectChanges 方法取消对记录的删除 当使用该方法删除记录行时, 该行的状态会恢复为 Unchanged 在删除完毕后, 同样需要保持 DataSet 中的数据和数据库中的数据的一致性 示例代码如下所示 da.update(ds, "datatable"); 使用 Update 方法能够使 DataSet 中的数据和数据库中的数据保持一致性, 在 ASP 中, 这种方法也比较常见 9.5 使用存储过程 存储过程在开发过程中经常被使用, 因为存储过程能够将数据操作和程序操作在代码上分离 而且相对于 SQL 语句而言, 存储过程具有更好的性能和安全性, 使用存储过程能够提高应用程序的性能和安全性 存储过程的优点 在数据库操作中, 已经有了 SQL 语句, 为何还需要存储过程 因为存储过程有 SQL 语句不能具备的特点和优点, 以至于存储过程能在严格的数据库驱动的应用程序中起到重要的作用 存储过程的优点包括以下几个方面 事务处理 速度和性能 过程控制 安全性 减少网络流量和通信 模块化 283
15 ASP.NET 开发技术大全 1. 事务处理存储过程中, 包括多个 SQL 语句, 存储过程中的 SQL 语句属于事务处理的范畴 也就是说, 存储过程类似于一个函数 当执行存储过程时, 存储过程中的 SQL 语句要不都执行, 要不都不执行 2. 速度和性能存储过程由数据库服务器编译和优化, 优化包括使用存储过程在运行时所必需的特定数据库的结构信息, 这样在执行过程中会节约很多时间 存储过程完全在数据库服务器上执行, 避免了大量的 SQL 语句代码的传递 对于循环使用 SQL 语句而言, 存储过程在速度和性能上都被优化 3. 过程控制在编写存储过程中, 可以使用 if else for 以及 while 循环 这些语句并不能在 SQL 语句中编写, 但是可以在存储过程中编写 当需要进行大量的和复杂的操作时,SQL 语句需要通过和编程语言一同编写才能实现, 而且实现复杂 相比之下, 存储过程可以对过程进行控制 4. 安全性存储过程也可以作为额外的安全层 开发人员或者用户, 都只能对数据库中的存储过程进行使用, 而无法直接对表进行数据操作 这样封装了数据操作, 提高了安全性 5. 减少网络流量和通信存储过程是在数据库服务器上运行的 在使用存储过程中, 无需将大量的 SQL 语句代码传递给数据库服务器, 而只需告诉数据库服务器执行哪个存储过程即可, 而数据库服务器则会自行执行中间处理操作, 而不会通过网络传递不必要的数据 6. 模块化正如代码编写规范和设计模式一样, 通常情况下, 开发团队或者公司需要严谨的代码编写风格和良好的协调能力 例如一个团队有人专门负责编码, 有人专门负责数据库开发, 那么可以让数据库开发人员负责数据库的开发, 而编码的程序员只需要使用数据库开发人员设计的存储过程即可 在这种情况下, 数据库操作和应用程序编码的操作被分开, 在维护 管理中也非常方便 如果数据库存储过程的代码出现问题, 则只需要修改存储过程中的代码即可 创建存储过程 存储过程可以通过 SQL Server Management Studio 创建, 也可以使用.NET 框架通过编程实现 SQL Server Management Studio 创建存储过程比较方便 右击 对象资源管理器 中相应的数据库, 在弹出的快捷菜单中选择 可编程性 选项并选择 存储过程 选项 284
16 第 9 章 ASP.NET 操作数据库 单击右键, 选择 新建存储过程 选项, 系统会自动创建一个新的标签 (tab) 窗口, 以提供输入存储过程语句, 如图 9-3 所示 图 9-3 使用 Server Management Studio 创建存储过程 在 tab 窗口中输入存储过程, 代码如下所示 CREATE PROC myproc varchar(50) OUTPUT ) AS SET NOCOUNT ON int FROM mynews WHERE (id=@id) GROUP BY mynews.title 上述存储过程返回了数据库中新闻的标题内容 其中,@id 表示新闻的 id,@title 表示新闻的标题 的值, 并且返回新闻的总数 在 C# 中同样可以使用编程实现存储过程的创建, 示例代码如下所示 string str = "CREATE PROC myproc" + "(" + "@id int," + "@title varchar(50) OUTPUT" + ")" + "AS" + "SET NOCOUNT ON" + int"
17 ASP.NET 开发技术大全 "FROM mynews" + "WHERE (id=@id)" + "GROUP BY mynews.title" + SqlCommand cmd = new SqlCommand(str, con); cmd.executenonquery(); // 使用 cmd 的 ExecuteNonQuery 方法创建存储过程 上述代码通过使用 SqlCommand 对象的 ExecuteNonQuery 方法在数据库中创建了一个存储过程 该存储过程用于返回了数据库中新闻的标题内容 调用存储过程 创建存储过程之后, 可以在.NET 应用程序中使用存储过程 存储过程可以看成是一个函数, 可以对存储过程进行调用, 传递参数, 接受返回值 在调用存储过程前, 首先要与数据库建立连接 示例代码如下所示 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); 建立与数据库连接后, 需要使用 Command 对象使用存储过程,Command 对象接受的两个参数分别为 SQL 语句和 Connection 对象 在使用存储过程时, 其中表示 SQL 语句的参数可以直接编写为存储过程名 示例代码如下所示 SqlCommand cmd = new SqlCommand("getdetail", con); // 使用存储过程 默认情况下,Command 对象的类型是 SQL 语句, 必须将 Command 对象的 CommandType 属性设置为存储过程 系统才会调用存储过程 示例代码如下所示 cmd.commandtype = CommandType.StoredProcedure; // 设置 Command 对象的类型 设置执行类型后, 需要为存储过程增加参数 示例代码如下所示 SqlParameter spr; // 表示执行一个存储过程 spr = cmd.parameters.add("@id", SqlDbType.Int); // 增加参数 id spr = cmd.parameters.add("@title", SqlDbType.NChar,50);// 增加参数 title spr.direction = ParameterDirection.Output; // 该参数是输出参数 spr = cmd.parameters.add("@count", SqlDbType.Int); // 增加 count 参数 spr.direction = ParameterDirection.ReturnValue; // 该参数是返回值 cmd.parameters["@id"].value = 1; // 为参数初始化 cmd.parameters["@title"].value = null; // 为参数初始化参数设置完毕后, 执行 ExecuteNonQuery 方法能够执行存储过程, 就相当于开始调用函数 示例代码如下所示 cmd.executenonquery(); // 执行存储过程 当存储过程执行完毕后, 能够获取参数和返回值, 示例代码如下所示 Label1.Text = cmd.parameters["@count"].value.tostring(); // 获取返回值使用 SQL Server Management Studio 同样能够执行存储过程 右击存储过程, 在弹出的快捷菜单中, 选择 执行存储过程 选项, 系统会提示输入参数, 如图 9-4 所示 输入 286
18 第 9 章 ASP.NET 操作数据库 相应的参数, 单击 确定 按钮, 系统会执行存储过程并返回相应的值, 如图 9-5 所示 图 9-4 为存储过程传递参数 图 9-5 执行完成使用 SQL Server Management Studio 能够快速地创建和使用存储过程, 同样, 能够通过编程的方法实现存储过程的创建 参数的传递以及执行 存储过程的优点就在于速度比较快, 能够控制过程 减少网络通信和模块化 熟练地使用存储过程能够提高应用程序的性能和复用性 9.6 ASP.NET 数据库操作实例 在了解了数据源控件和数据绑定控件的功能和使用方法, 并且了解了 ADO.NET 的基本知识后, 就可以使用控件和 ADO.NET 来操作数据库 ASP.NET 提供了强大的数据源控件和数据绑定控件, 能够迅速地对数据库进行操作, 同时, 使用 ADO.NET 对数据进行操 287
19 ASP.NET 开发技术大全 作, 能够加深对 ADO.NET 的认识 制作用户界面 (UI) 使用数据控件和数据源控件显示数据, 则需要为控件制作相应的用户界面, 让数据控件对用户呈现的效果更好 首先, 需要使用创建数据绑定控件 GridView 和数据源控件, 并配置数据源控件, 如图 9-6 所示 图 9-6 配置数据源控件和数据绑定控件显然, 对于用户而言, 该数据源控件和数据绑定控件显得很不友好, 这里就需要对数据绑定控件的界面进行修改 通过配置数据绑定控件的相应格式, 可以修改数据绑定控件的外观, 如图 9-7 所示 图 9-7 编辑数据绑定控件界面开发人员能够自定义数据绑定控件的样式, 并且修改某些列的顺序 这里使用了自动套用格式, 并将数据绑定控件的 width 属性设置为 100% 这样编写宽度就能够适应浏览器的大小, 从而随着浏览器的大小而改变 数据绑定控件配置完成后, 值得注意的是, 需要选择 SQL 语句的 高级 选项, 如 生成 INSERT UPDATE 和 DELETE 语句 选项让数据绑定控件支持编辑 删除和选择, 如图 9-8 所示 配置 SQL 高级选项后, 数据源控件就会自动生成 INSERT UPDATE DELETE 语句 288
20 第 9 章 ASP.NET 操作数据库 示例代码如下所示 图 9-8 SQL 高级选项 <asp:sqldatasource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:mytableConnectionString %>" DeleteCommand="DELETE FROM [mynews] WHERE [ID] InsertCommand="INSERT INTO [mynews] ([TITLE]) VALUES (@TITLE)" SelectCommand="SELECT * FROM [mynews]" UpdateCommand="UPDATE [mynews] SET [TITLE] WHERE [ID] <DeleteParameters> <asp:parameter Name="ID" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:parameter Name="TITLE" Type="String" /> <asp:parameter Name="ID" Type="Int32" /> </UpdateParameters> <InsertParameters> <asp:parameter Name="TITLE" Type="String" /> </InsertParameters> </asp:sqldatasource> 在完成用户界面的配置后, 系统生成的 HTML 代码如下所示 <asp:gridview ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyNames="ID" DataSourceID="SqlDataSource1" GridLines="Horizontal" Width="100%"> <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> <Columns> <asp:boundfield DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:boundfield DataField="TITLE" HeaderText="TITLE" SortExpression= "TITLE" /> </Columns> <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign= "Right" /> <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor= "#F7F7F7" /> <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> <AlternatingRowStyle BackColor="#F7F7F7" /> </asp:gridview> 开发人员可以编写以上 HTML 实现更多的效果 当确定用户界面编写完毕后, 就可以为数据绑定控件选择操作了 289
21 ASP.NET 开发技术大全 使用 GridView 显示 删除 修改数据 配置完成用户界面, 则需要选择 GridView 控件的属性并配置 GridView 任务, 如图 9-9 和图 9-10 所示 图 9-9 默认 GridView 任务 图 9-10 选择 GridView 任务 GridView 控件支持分页 排序 编辑 删除和选定内容等操作 在 GridView 控件中, 首先必须勾选择 分页 复选框, 然后再配置 PageSize 属性才能够让 GridView 控件支持分页功能 在 GridView 控件属性中如果选择了 分页 复选框而不配置 PageSize 属性, 则默认按 10 条数据分页 选择了以启用分页 启用编辑 启用删除和启用选定内容复选框后,GridView 控件的界面如图 9-11 所示 因为在数据源控件配置的过程中, 已经配置了支持编辑 删除和选择, 所以在数据绑定控件中可以选择启用编辑 启用删除和启用选定内容等复选框, 并且系统默认支持更新 插入 删除等操作, 运行后如图 9-12 所示 图 9-11 编辑数据绑定控件界面 图 9-12 GridView 控件显示 GridView 控件支持编辑 删除和选择 当单击编辑时, 能够对选择的行进行数据编辑, 如图 9-13 所示 编辑完成后, 单击 更新 按钮则可以执行更新操作, 而无需手动编写 UPDATE 操作, 如图 9-14 所示 290
22 第 9 章 ASP.NET 操作数据库 图 9-13 编辑数据 图 9-14 执行更新操作 当单击删除时, 则会执行 DELETE 命令, 而无需手动编写 DELETE 命令 GridView 控件支持分页 排序 编辑 删除和选定内容, 开发人员无需手动编写更新 删除 编辑, 也无需手动编写分页 对 GridView 控件进行缓存设置能够提高应用程序性能 在对数据库的选择 编辑及更新中,GridView 控件能够方便开发人员, 简化代码 使用 DataList 显示数据 DataList 控件需要编辑 HTML 模板来显示数据 虽然在开发上,DataList 控件比 GridView 更加复杂, 但是 DataList 控件能够实现更多的效果 相比之下,DataList 控件比 GridView 控件更加灵活, 能够进行复杂的事件编写和样式控制 选择 自动套用格式 复选框并将 DataList 控件的宽度设置为 100% 编辑基本的用户界面, 如图 9-15 所示 通过编辑 ItemTemplate 能够实现自定义模板, 而无需像 GridView 一样, 以表格形式呈现 编辑后运行, 结果如图 9-16 所示 图 9-15 DataList 控件显示数据 图 9-16 编写 ItemTemplate 模板 DataList 控件执行数据操作基本上同 GridView 一样, 之下,DataList 控件有着更灵活的模板方案, 能够实现更多的显示效果 DataList 分页实现 DataList 控件本身并不带分页实现 如果需要 DataList 能够实现分页效果, 则需要通过代码实现 DataList 控件的分页 DataList 控件分页需要增加若干标签 (Label) 控件来显 291
23 292 ASP.NET 开发技术大全 示上一页 下一页等分页所需要的连接, 示例代码如下所示 <asp:label ID="Label4" runat="server" Text="Label"></asp:Label> <asp:label ID="Label3" runat="server" Text="Label"></asp:Label> <asp:label ID="Label2" runat="server" Text="Label"></asp:Label> 上述代码创建了 3 个 Label 控件 这 3 个控件并无需初始化, 这 3 个控件通过编程实现上一页, 下一页的分页形式 如果需要执行分页, 则需要编写 cs 页面代码,cs 页面代码如下所示 PagedDataSource objpds = new PagedDataSource(); objpds.datasource = this.sqldatasource1.select(new DataSourceSelectArguments()); objpds.allowpaging = true; // 设置是否允许分页 objpds.pagesize = 3; // 设置分页条目数 int CurPage; // 设置当前页码 Label2.Visible = false; // 隐藏标签 Label4.Visible = false; 上述代码初始化 PagedDataSource 对象, 并将分页控件默认初始化属性 Visible 为 false 其中 PagedDataSource 是封装分页相关属性的类 if (Request.QueryString["Page"]!= null) // 如果传递的页面不为空 CurPage = Convert.ToInt32(Request.QueryString["Page"]); // 获取传递的参数 else CurPage = 1; // 页面的值为 1 objpds.currentpageindex = CurPage - 1; // 设置索引 Label2.Visible = true; // 显示标签 Label4.Visible = true; Label3.Text = "<a href=\"datalist.aspx\"> 首页 </a>";// 编写分页 Label2.Text = "<a href=\"datalist.aspx?page=" + Convert.ToString(CurPage + 1) + "\"> 下一页 </a>"; Label4.Text = "<a href=\"datalist.aspx?page=" + Convert.ToString(CurPage - 1) + "\"> 上一页 </a>"; 上述代码通过传递的 Page 的值进行分页操作 如果传递的 Page 的值不为空, 则从数据源控件中读取相应的数据, 并显示到数据绑定控件中 if (CurPage == 1) Label4.Visible = false; if (objpds.islastpage) Label2.Visible = false; DataList1.DataSourceID = ""; DataList1.DataSource = objpds; DataList1.DataBind(); // 如果只有一个页面 // 隐藏标签 // 重新绑定数据 // 编写 DataList 的数据源 // 绑定数据源 上述代码通过 PagedDataSource 对象实现了分页效果, 并且将分页条目数设置为 3 当数据超过 3 条时, 则会实现分页 运行后如图 9-17 和图 9-18 所示
24 第 9 章 ASP.NET 操作数据库 图 9-17 实现下一页效果 图 9-18 实现上一页效果 DataList 控件虽然不支持分页, 但是能够通过编程实现 DataList 控件的分页效果 DataList 控件在模板编辑和代码开发上虽然没有 GridView 方便, 但是却提高了灵活性, 能够自定义分页和数据显示 使用 SQLHelper 操作数据库 使用控件, 能够方便开发人员的开发和使用 但是很多情况下, 不能使用控件来实现, 所以很多情况都需要使用 ADO.NET 操作数据库中的数据 SQLHelper 是将 ADO.NET 中对数据操作的类和对象进行封装的一个类库 使用 SQLHelper 能够提高数据库操作的效率 1. 创建 SQLHelper SQLHelper 类经常在数据库开发中使用, 不仅封装了数据库操作, 也提高了数据库操作的安全性 SQLHelper 在微软的开发中和 DEMO 中经常被使用,SQLHelper 通常用于多层设计 如果需要使用 SQLHelper 类, 可以到微软官方网站下载最新的 SQLHelper 类, 也可以自行编写 SQLHelper 类 如果自行创建 SQLHelper 类, 则在解决方案管理器中新建一个类库, 如图 9-19 所示 创建类库后, 删除自动生成的 Class1 类, 并创建一个新类, 类名为 SQLHelper, 如图 9-20 所示 图 9-19 添加类库 图 9-20 创建 SQLHelper 类 293
25 ASP.NET 开发技术大全 如果使用下载的 SQLHelper 类, 则可以右击解决方案管理器, 在弹出的快捷菜单中, 选择 添加现有项 选项, 然后在弹出的对话框中选择 现有项 选项卡, 在 现有项 选项卡添加相应的文件即可 在 SQLHelper 类下对数据操作进行封装, 开发人员能够使用自己封装的类进行数据操作 示例代码如下所示 #region // 数据库连接串 private static readonly string database = " 数据库 "; // 配置数据库信息 private static readonly string uid = " 用户名 "; // 配置用户名信息 private static readonly string pwd = " 密码 "; // 配置密码信息 private static readonly string server = " 服务器 "; // 配置服务器信息 private static readonly string condb = "server='"+ server +"';database= '" + database + "';uid= '" + uid + "';pwd='" + pwd + "';Max Pool Size=100000;Min Pool Size=0; Connection Lifetime=0;packet size=32767;connection Reset=false; async=true"; // 设置连接字串 #endregion #region//dataadapter 方法返回 DataSet 数据集 /// <summary> /// DataAdapter 方法返回 DataSet 数据集 /// </summary> /// <param name="sqlcmd">sql 语句 </param> /// <param name="command"> 操作参数枚举类型 </param> /// <returns></returns> public static DataSet DataAdapter(string sqlcmd, SDACmd command, // 实现适配器 string tabname, params SqlParameter[] paralist) SqlConnection con = new SqlConnection(condb); // 创建连接对象 SqlCommand cmd = new SqlCommand(); // 创建 Command 对象 cmd.connection = con; // 使用连接对象 cmd.commandtext = sqlcmd; // 配置连接字串 if (paralist!= null) cmd.commandtype = CommandType.Text; // 配置 Command 类型 foreach (SqlParameter para in paralist) // 遍历参数 cmd.parameters.add(para); // 添加参数 SqlDataAdapter sda = new SqlDataAdapter(); // 创建适配器 switch (command) // 查找条件 case SDACmd.select: // 如果为 select 执行 sda.selectcommand = cmd; break; case SDACmd.insert: // 如果为 insert 执行 sda.insertcommand = cmd; break; case SDACmd.update: // 如果为 update 执行 sda.updatecommand = cmd; break; case SDACmd.delete: // 如果为 delete 执行 sda.deletecommand = cmd; break; DataSet ds = new DataSet(); // 创建数据集 sda.fill(ds, tabname); // 填充数据集 294
26 第 9 章 ASP.NET 操作数据库 return ds; // 返回数据集 在上述代码中, 还需要通过一个枚举类型进行 switch 操作 枚举类型用于判断执行的操作, 示例代码如下所示 public enum SDACmd select, delete, update, insert // 定义枚举类型 定义的枚举类型用于在程序中进行筛选操作, 用于指定 SQL 语句执行的操作 在 SQLHelper 类中, 还需要封装 DataReader 方法进行 DataReader 的封装和实现 开发人员能够使用 SQLHelper 类中的 DataReader 方法进行数据库的读取, 示例代码如下所示 public static SqlDataReader ExecReader(string sqlcmd, params SqlParameter[] paralist) SqlConnection con = new SqlConnection(condb); // 创建连接对象 SqlCommand cmd = new SqlCommand(); // 创建 Command 对象 cmd.connection = con; // 使用连接 cmd.commandtext = sqlcmd; // 配置 SQL 语句 if (paralist!= null) cmd.commandtype = CommandType.Text; // 配置 Command 类型 foreach (SqlParameter para in paralist) cmd.parameters.add(para); // 添加参数 SqlDataReader sdr = cmd.executereader(commandbehavior.closeconnection); return sdr; 上述代码实现了 DataReader 对象, 使用 DataReader 能够填充 SqlDataReader 对象并进行数据的循环输出 在 ADO.NET 中, 通常需要执行 SQL 语句进行数据库的操作 在 SQLHelper 类中, 同样需要封装执行 SQL 语句的操作以便能够快速执行数据操作 public static void ExecNonQuery(string sqlcmd, params SqlParameter[] paralist) using (SqlConnection con = new SqlConnection(condb)) // 创建连接对象 SqlCommand cmd = new SqlCommand(); // 创建 Command 对象 cmd.connection = con; // 使用连接 cmd.commandtext = sqlcmd; // 配置执行类型 if (paralist!= null) cmd.commandtype = CommandType.Text; // 配置执行类型 foreach (SqlParameter para in paralist) cmd.parameters.add(para); // 添加参数 // 打开数据连接 cmd.executenonquery(); // 执行 SQL 语句 上述代码编写了 SQLHelper 类操作数据库的函数 通过执行函数并传递参数, 即可实现数据库的插入 更新和删除 295
27 ASP.NET 开发技术大全 2. 使用 SQLHelper 创建完成 SQLHelper 类后, 需要为应用程序配置 SQLHelper 的基本属性, 代码如下所示 private static readonly string database = "mytable"; private static readonly string uid = "sa"; private static readonly string pwd ="sa"; private static readonly string server = "local"; // 配置数据库 // 配置用户名 // 配置用户密码 // 配置服务器的值 上述代码为 SQLHelper 类配置了属性 当使用 SQLHelper 类时, 系统会自动连接数据库, 在完成使用后, 系统会自动关闭数据库 如果需要在当前项目使用 SQLHelper 类, 则需要添加引用来使用 SQLHelper 类, 右击现有项目, 在弹出的快捷菜单中选择 添加 现有项 命令, 在弹出的 添加引用 对话框中选择 项目 标签, 就可以添加相同项目的类库, 如图 9-21 所示 图 9-21 添加引用 对话框引用添加完毕, 在使用 SQLHelper 页面的 cs 页面中, 需要添加命名空间 命名空间的名称和创建类库的名称相同 如果需要更改名称, 可以通过修改类库的属性来修改 示例代码如下所示 using MYSQL; 引用完毕后, 就可以执行 SQL 语句, 使用 SQLHelper 执行 SQL 语句非常方便 下面代码演示了如何执行插入 删除操作 string strsql = "insert into mynews values ('SQLHelper 插入标题 ')"; // 编写 SQL 语句 SQLHelper.ExecNonQuery(strsql); // 执行 SQL 语句上述代码运行后, 则会执行插入操作 相比于 ADO.NET, 封装后的代码更加简便易懂, 删除操作代码如下所示 string strsql2 = "delete form mynews where id=3"; SQLHelper.ExecNonQuery(strsql2); // 编写 SQL 语句 // 执行 SQL 语句 296
28 第 9 章 ASP.NET 操作数据库 当需要执行 SELECT 语句时, 可以通过 SQLHelper.DataAdapter 获取数据, 示例代码如下所示 string strsql = "select * from mynews where id=3"; // 编写 SQL 语句 DataSet ds = SQLHelper.DataAdapter(strsql, SQLHelper.SDACmd.select, "mydatatable"); 上述代码通过 SQLHelper.DataAdapter 获取数据, 并创建了一个 mydatatable 虚拟表, 填充 DataSet 对象 当需要获取 DataSet 对象中的数据时, 和普通的 DataSet 对象一样 SQLHelper 封装了 ADO.NET 中的许多方法, 为开发人员提高了效率, 同时也增加了安全性和模块化的特性 注意 : 上述代码中的 SQLHelper 类能够执行的是 SQL 语句 如果需要执行存储过程, 则需要更改 SQLHelper 类中的相应的 CommandType 属性的值 9.7 小结 本章介绍了 ADO.NET 中操作数据库和执行数据库的一些方法, 还介绍了如何编写和执行 SQL 语句, 包括 SQL INSERT SQL UPDATE SQL DELETE 等数据操作语句 另外, 本章还介绍了如何通过 DataSet 数据集实现插入 更新 删除等操作来深入了解 ADO.NET 本章通过演示使用控件更新和操作数据库, 加强了控件操作数据库的示例 本章还包括以下内容 使用 ADO.NET 操作数据库 : 介绍了 ADO.NET 操作数据库的方法 ASP.NET 创建和插入记录 : 介绍了 SQL INSERT 和数据操作 ASP.NET 更新数据库 : 介绍了 SQL UPDATE 和数据操作 ASP.NET 删除数据 : 介绍了 SQL DELETE 和数据操作 使用存储过程 : 介绍了如何使用存储过程 数据库操作实例 : 介绍了企业应用中常用的 SQLHelper, 以及用户操作数据库的配置 本章还介绍了如何创建和使用企业应用中常用的 SQLHelper 类,SQLHelper 类能够简化数据使用, 提高开发效率 下一章中将会讲解如何连接其他数据库 297
if (command == null) throw new ArgumentNullException("command"); if (commandparameters!= null) foreach (SqlParameter p in commandparameters) if (p!= n
微软 SqlHelper 类中文注释和使用方法整理 : 飞晏博客 ; 网址 :http://www.feiyan.info/416.html 和微软发布的 SqlHelper.cs 不同, 为了方便我把里面的 SqlHelperParameterCatch.cs 单独 列出来了 此外还有 OledbHelper.cs OdbcHelper.cs 和 XMLHelper.cs 可供使用 SQLHelper.cs
untitled
1 Access 料 (1) 立 料 [] [] [ 料 ] 立 料 Access 料 (2) 料 [ 立 料 ] Access 料 (3) 料 料 料 料 料 料 欄 ADO.NET ADO.NET.NET Framework 類 來 料 料 料 料 料 Ex MSSQL Access Excel XML ADO.NET 連 .NET 料.NET 料 料來 類.NET Data Provider
untitled
1 .NET 料.NET 料 料來 類.NET Data Provider SQL.NET Data Provider System.Data.SqlClient 料 MS-SQL OLE DB.NET Data Provider System.Data.OleDb 料 Dbase FoxPro Excel Access Oracle Access ODBC.NET Data Provider 料
教案模板4-2
传 智 播 客 ASP.NET 就 业 实 例 教 程 教 学 设 计 课 程 名 称 :ASP.NET 就 业 实 例 教 程 授 课 年 级 : 2015 年 级 授 课 学 期 : 2015 学 年 第 二 学 期 教 师 姓 名 : 某 某 老 师 2015 年 02 月 02 日 课 题 名 称 第 2 章 ADO.NET 计 划 学 时 6 课 时 内 容 分 析 教 学 目 标 及 基
帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)
untitled
12-1 -2 VC# Web Blog 12-1 -1-1 12-1.1-1 C:\ ChartModuleSample_CSharp\Application\2001\ Files\ 4096 KB 120 Web.Config httpruntime maxrequestlength executiontimeout 12-2
2 ADO.NET Internet 1.2
C H A P T E R 1 ADO.NET XML ADO.NET ADO.NET.NET Framework.NET XML ADO.NET.NET Microsoft Visual Studio 200 ADO.NET ADO.NET 2 ADO.NET 1 1.1 1.1 1.1 1.2 Internet 1.2 1.1 Internet 2 1.2 (Internet) Web 1. ADO.NET
SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基
开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些
6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM
CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986
untitled
Data Source 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 8-1 Data Source 8-2 Data Source 8-3 Data Source 8-4 Data Source 8-5 DataSourceID 8-6 DataSourceMode 8-7 DataSource 8-8 8-9 Parameter Direction
<463A5CC2A4B6ABD1A7D4BA5CBDCCD1A7D6B8C4CFD7DC5CA1B656697375616C20432320B3CCD0F2C9E8BCC6A1B7BFCEB3CCD6B8C4CF2E646F63>
目 录 Visual C# 程 序 设 计 课 程 指 南 计 算 机 科 导 论 课 程 指 南 8 计 算 机 网 络 基 础 课 程 指 南 4 网 络 工 程 课 程 设 计 课 程 指 南 0 网 络 应 用 与 实 践 课 程 指 南 4 ADO.net 课 程 指 南 7 C 程 序 设 计 课 程 指 南 数 字 信 号 处 理 DSP 课 程 指 南 9 电 子 电 路 EDA 技
1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->
目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController
PowerPoint Template
RedGres MSSQL 到 PostgreSQL 的应用迁移 Migration Application from MSSQL to PostgreSQL Jerray.Huang 主要内容 1. 2. 3. 4. 迁移总体分析 数据迁移 - 类型与函数 语法与存储过程迁移 数据提供程序迁移 为什么要迁移 操作系统的问题 版权问题 经济问题 稳定性问题 客户要求 政府要求 硬件升级 其它 MS-SQL
一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S
一 個 SQL Injection 實 例 的 啟 示 頁 1 / 6 你 的 網 站 在 裸 奔 嗎? 一 個 SQL Injection 實 例 的 啟 示 作 者 : 李 明 儒 SQL Injection( 資 料 隱 碼 攻 擊 ) 問 題 早 就 不 是 什 麼 新 聞, 但 前 陣 子 在 一 個 頗 具 知 名 度 的 活 動 網 站 上, 赫 然 發 現 它 大 刺 刺 地 現 身!
Guava学习之Resources
Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于
untitled
1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 [email protected] www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立
untitled
1 LinkButton LinkButton 連 Button Text Visible Click HyperLink HyperLink 來 立 連 Text ImageUrl ( ) NavigateUrl 連 Target 連 _blank _parent frameset _search _self 連 _top 例 sample2-a1 易 連 private void Page_Load(object
<4D F736F F D20CAFDBEDDBFE2C1ACBDD3BDB2D2E52E646F63>
数据库连接 目标 : 熟练掌握 connection,command, DataReader, DataSet 类进行数据库连接. 重点 : 数据读取器, 和数据集的使用. 难点 : 数据集数据的填充. 一 ADO.net 概述 ADO.NET 是新一代 Microsoft ActiveX 数据对象 (ADO), 它是一种应用程序编程界面 (API), 可用来创建分布式的数据共享应用程序 尽管 ADO.NET
一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页
第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共
Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f
Web Chapter 22 SharePoint Web Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web 21 22-1 SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f Views.asmx View SharePoint
untitled
1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override
OOP with Java 通知 Project 4: 4 月 19 日晚 9 点
OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d
ASP
ASP.NET 三层架构详解 Power By: Tian 一 数据库 /*==========================================*/ /* DBMS name: Microsoft SQL Server 2000 */ /*==========================================*/ if exists (select 1 from sysobjects
導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式
導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式語言篇第 3 章 C# 程式語言基礎 C# C# 3.0 var 第 4 章 基本資料處理 C# x
概述
OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3
// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple
halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,
四川省普通高等学校
四 川 省 普 通 高 等 学 校 计 算 机 应 用 知 识 和 能 力 等 级 考 试 考 试 大 纲 (2013 年 试 行 版 ) 四 川 省 教 育 厅 计 算 机 等 级 考 试 中 心 2013 年 1 月 目 录 一 级 考 试 大 纲 1 二 级 考 试 大 纲 6 程 序 设 计 公 共 基 础 知 识 6 BASIC 语 言 程 序 设 计 (Visual Basic) 9
untitled
1 .NET 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Response 類 Write 料 Redirect URL Response.Write("!! ives!!"); Response.Redirect("WebForm2.aspx"); (1) (2) Web Form
2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF
Chapter 2 WF 2.1 WF 2.2 2. XAML 2. 2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF WF WF WF WF EDI API WF Visual Studio Designer 1 2.1 WF Windows Workflow Foundation 2 WF 1 WF Domain-Specific
res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml
拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,
untitled
Inside ASP.NET 2.0- ASP.NET 1.1 2. 理念 讀 了 了 度 讀 了 理 類 來 來說 流 了 來 來 來 來 理 來 不 讀 不 不 力 來參 流 讀 了 異 行 來了 錄 行 不 了 來 了 來 行 論說 了 更 不 例 來了 力 行 樂 不 說 兩 例 利 來 了 來 樂 了 了 令 讀 來 不 不 來 了 不 旅行 令 錄 錄 來 了 例 來 利 來 ManagerProvide
VB控件教程大全
Datagrid DataGrid1.Columns.Remove(0) ' 0 DataGrid1.Columns.Add(0).Caption= ' DataGrod1.Columns(0).DataField= Name ' Adodc1.Refresh DataGrid BackColor Font DataGrid CellPadding HTML CellSpacing HTML Width
OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课
OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class
(Microsoft Word - blog\244p\275\327\244\345no.1.doc)
篇名 : 作者 : 喻千榮大安高工電子三甲佟建達大安高工電子三甲陳逸樵大安高工電子三甲 指導老師 張漢明老師 壹 前言 我們製作的專題是部落格網站, 什麼是 部落格 呢? 部落格 是一種能讓使用者在網頁上發表意見, 並且提供回應的網路平台 ; 使用者不必具備太多電腦知識或網頁撰寫技巧, 就可以輕鬆做出一個屬於自己的個人站台, 這似乎和傳統的 bbs, 就是所謂的 電子告示板系統 差不多, 但它比 bbs
Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech
- OfficeCoder 1 2 3 4 1,2,3,4 [email protected] 1 [email protected] 2 [email protected] 3 [email protected] 4 Abstract. Microsoft Word 2013 Word 2013 Office Keywords:,, HTML5,
ebook 96-16
16 13 / ( ) 16-1 SQL*Net/Net8 SQL*Net/Net8 SQL*Net/Net8 16-1 / S Q L SQL*Net V2 N e t 8 S Q L * N e t N e t ( ) 16.1 S Q L O r a c l e S Q L 16 401 ) ( H R _ L I N K create database link p u b l i c (
1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10
Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1
Part IIASP.NET DataGrid GridView ASP.NET 3.5 GridViewDataGrid ASP.NET 1.xGridView Note HTML CSS HTML CSS
11 DataGrid...258 GridView...275...324 ASP.NET.NET 10 ASP.NETASP.NET 1.x DataGrid ASP.NET 2.0 GridView / DataGrid GridViewHTML DataGrid GridView DataGrid ASP.NET 1.x ASP.NET 1.xDataGrid ASP.NET 2.0 GridView
Microsoft Word - 01.DOC
第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的
通过Hive将数据写入到ElasticSearch
我在 使用 Hive 读取 ElasticSearch 中的数据 文章中介绍了如何使用 Hive 读取 ElasticSearch 中的数据, 本文将接着上文继续介绍如何使用 Hive 将数据写入到 ElasticSearch 中 在使用前同样需要加入 elasticsearch-hadoop-2.3.4.jar 依赖, 具体请参见前文介绍 我们先在 Hive 里面建个名为 iteblog 的表,
目錄
資 訊 素 養 線 上 教 材 單 元 五 資 料 庫 概 論 及 Access 5.1 資 料 庫 概 論 5.1.1 為 什 麼 需 要 資 料 庫? 日 常 生 活 裡 我 們 常 常 需 要 記 錄 一 些 事 物, 以 便 有 朝 一 日 所 記 錄 的 事 物 能 夠 派 得 上 用 場 我 們 能 藉 由 記 錄 每 天 的 生 活 開 銷, 就 可 以 在 每 個 月 的 月 底 知
IsPostBack 2
5 IsPostBack 2 TextBox 3 TextBox TextBox 4 TextBox TextBox 1 2 5 TextBox Columns MaxLength ReadOnly Rows Text TextMode TextMode MultiLine TextMode MultiLine True False TextMode MultiLine Password MulitLine
Oracle 4
Oracle 4 01 04 Oracle 07 Oracle Oracle Instance Oracle Instance Oracle Instance Oracle Database Oracle Database Instance Parameter File Pfile Instance Instance Instance Instance Oracle Instance System
ebook45-5
5 S Q L SQL Server 5.1 5-1 SQL Server 5-1 A B S A C O S A S I N ATA N AT N 2 C E I L I N G C O S C O T D E G R E E S E X P F L O O R L O G L O G 10 P I P O W E R R A D I A N S R A N D R O U N D S I G N
<ADB6ADB1C25EA8FAA6DB2D4D56432E706466>
packages 3-31 PART 3-31 03-03 ASP.NET ASP.N MVC ASP.NET ASP.N MVC 4 ASP.NET ASP.NE MVC Entity Entity Framework Code First 2 TIPS Visual Studio 20NuGetEntity NuGetEntity Framework5.0 CHAPTER 03 59 3-3-1
untitled
OO 1 SQL Server 2000 2 SQL Server 2000 3 SQL Server 2000 DDL 1 2 3 DML 1 INSERT 2 DELETE 3 UPDATE SELECT DCL 1 SQL Server 2 3 GRANT REVOKE 1 2 1 2 3 4 5 6 1 SQL Server 2000 SQL Server SQL / Microsoft SQL
跟我学mysql存储过程.doc
目录 1.1 CREATE PROCEDURE ( 创建 ) ---------------------------------------------------- 2 1.2 ALTER PROCEDURE ( 修改 ) ------------------------------------------------------- 2 1.3 DROP PROCEDURE ( 删除 ) -------------------------------------------------------
FY.DOC
高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主
PowerPoint Presentation
Skill-building Courses Intro to SQL Lesson 2 More Functions in SQL 通配符 :LIKE SELECT * FROM Products WHERE PName LIKE %gizmo% PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo
Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.
Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes
ChinaBI企业会员服务- BI企业
商业智能 (BI) 开源工具 Pentaho BisDemo 介绍及操作说明 联系人 : 杜号权苏州百咨信息技术有限公司电话 : 0512-62861389 手机 :18616571230 QQ:37971343 E-mail:[email protected] 权限控制管理 : 权限控制管理包括 : 浏览权限和数据权限 ( 权限部分两个角色 :ceo,usa; 两个用户
设计模式 Design Patterns
丁勇 Email:[email protected] 学习目标 掌握 HQL 查询 掌握 Criteria 查询 为什么使用 HQL 如何使用 Hibernate 查询所有房屋信息? SQL 语句 : select * from tbl_fwxx Hibernate 中如何实现查询 HQL Hibernate Query Lanuage Hibernate 查询语言 如何使用 HQL 使用 HQL 的四步
投影片 1
資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection
长 安 大 学 硕 士 学 位 论 文 基 于 数 据 仓 库 和 数 据 挖 掘 的 行 为 分 析 研 究 姓 名 : 杨 雅 薇 申 请 学 位 级 别 : 硕 士 专 业 : 计 算 机 软 件 与 理 论 指 导 教 师 : 张 卫 钢 20100530 长安大学硕士学位论文 3 1 3系统架构设计 行为分析数据仓库的应用模型由四部分组成 如图3 3所示
<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63>
基于 WINCE 平台 C# 编程要点之一 本文主要介绍在基于 Windows CE 平台的英创嵌入式主板下进行 C#(Microsoft Visual Stdio.Net 2005) 应用程序开发时会常常用到的一些功能函数以及开发方法, 这些方法适用于英创采用 WinCE 平台的所有型号嵌入式主板, 包括 EM9000 EM9260 EM9160 等 本文要点包括 : 文件的删除和复制 如何获取存取设备的空间大小
untitled
Database System Principle Database System Principle 1 SQL 3.1 SQL 3.2-3.3 3.4 3.5 3.6 Database System Principle 2 3.1 SQL SQL Structured Query Language SQL Database System Principle 3 SQL 3.1.1 SQL 3.1.2
无类继承.key
无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo [email protected] https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255
上海市教育考试院关于印发新修订的
沪 教 考 院 社 考 2012 7 号 上 海 市 教 育 考 试 院 关 于 印 发 上 海 市 高 等 学 校 计 算 机 等 级 考 试 大 纲 (2012 年 修 订 ) 的 通 知 各 有 关 高 校 : 为 进 一 步 加 强 本 市 高 校 计 算 机 基 础 教 学 工 作, 推 进 学 校 更 加 科 学 合 理 地 设 置 计 算 机 基 础 课 程 及 安 排 教 学 内 容,
"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti
SpringBoot 的配置 一 拦截器的配置 1 定义一个表单 用户名 : 密 码 :
untitled
-JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP
untitled
JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE
Microsoft Word - CX1000-HMI_程序开发_PLC通讯
用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll
untitled
http://idc.hust.edu.cn/~rxli/ 1.1 1.2 1.3 1.4 1.5 1.6 2 1.1 1.1.1 1.1.2 1.1.3 3 1.1.1 Data (0005794, 601,, 1, 1948.03.26, 01) (,,,,,) 4 1.1.1 Database DB 5 1.1.1 (DBMS) DDL ( Create, Drop, Alter) DML(
手册 doc
1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106
Hive:用Java代码通过JDBC连接Hiveserver
Hive: 用 Java 代码通过 JDBC 连接 Hiveserver 我们可以通过 CLI Client Web UI 等 Hive 提供的用户接口来和 Hive 通信, 但这三种方式最常用的是 CLI;Client 是 Hive 的客户端, 用户连接至 Hive Server 在启动 Client 模式的时候, 需要指出 Hive Server 所在节点, 并且在该节点启动 Hive Server
全国计算机技术与软件专业技术资格(水平)考试
全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明
Microsoft Word - A doc
使用 ASP.NET 技术实现 BLOB 类型数据存取的研究 陈少平, 方子帆, 舒文辉三峡大学机械与材料学院, 湖北宜昌 (443002) E-mail:[email protected] 摘要 : 通过对 ADO.NET 技术的数据模型分析研究与特点概述, 提出了对数据库中 BLOB 类型的数据进行存取的实现方法 结合具体实例, 说明在 Web 数据库系统中, 如何运用 ASP.NET 技术实现 Oracle
FileMaker 15 ODBC 和 JDBC 指南
FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc. / FileMaker WebDirect FileMaker, Inc. FileMaker
epub83-1
C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C
新版 明解C++入門編
511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,
01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysa
6 01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS 6-1 06 228 6-1 SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysadmin 6-1 SQL Server 2008 SSIS SQL Server (dbo) master
FileMaker 16 ODBC 和 JDBC 指南
FileMaker 16 ODBC JDBC 2004-2017 FileMaker, Inc. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc. FileMaker WebDirect FileMaker Cloud FileMaker,
學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘
ITE 資 訊 專 業 人 員 鑑 定 資 料 庫 系 統 開 發 與 設 計 實 務 試 卷 編 號 :IDS101 注 意 事 項 一 本 測 驗 為 單 面 印 刷 試 題, 共 計 十 三 頁 第 二 至 十 三 頁 為 四 十 道 學 科 試 題, 測 驗 時 間 90 分 鐘 : 每 題 2.5 分, 總 測 驗 時 間 為 90 分 鐘 二 執 行 CSF 測 驗 系 統 -Client
ebook 132-2
2 SQL Server 7.0 SQL Server SQL Server 7 SQL Server 7 5 2.1 SQL Server 7 SQL Server 7 SQL Server SQL Server SQL Server 2.1.1 SQL Server Windows NT/2000 Windows 95/98 ( r a n d o m access memory R A M )
ThreeDtunnel.doc
(12) 1 1. Visual Basic Private Sub LoadDatabase() Dim strip As String Dim straccount As String Dim strpassword As String Dim strdatabase As String Dim strtable As String Dim strsql As String Dim strtemp1
