上述代码规范了 INSERT 语句的编写规范,其中: 5.2.1 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 是相应的列的值。
5.2.1 SQL INSERT 数据插入语句 INSERT INTO mytables VALUES (‘新的新闻标题’) 如果需要向表 mytables 插入数据,而mytables里包括自动增长的主键 id 和 title 两列,则INSERT语句可以编写为如下代码。 INSERT INTO mytables VALUES (‘新的新闻标题’) 上述代码向表 mytables 中插入了一条新记录,并将 title 赋值为“新的新闻标题”。值得注意的是, 在这条语句中,并没有编写列的集合,是因为当不编写 column_list 时,则默认为每一个列插入数值。 注意:自动增长的主键类型的字段,无需向数据中插入数值,因为 SQL Server 会自动为该列赋值。 如果需要当插入数据时,需要指定插入相应的列的值,则可以将 SQL 语句代码编写如下。 INSERT INTO mytables (title) VALUES (‘新的新闻标题’)
5.2.1 SQL INSERT 数据插入语句 上述代码编写了 INSERT 语句以便数据的插入,同样在插入语句中如果需要插入所有的列,可以简 化 INSERT 语句以便快速进行数据插入,示例代码如下所示。 上述代码指定了列title,并对应了相应的值。若在表中存在多个列,列的顺序和列相应的值的顺序必须匹配。例如有3列并分别为number1,string2,datetime3,当需要向其中插入数据时,则可以编写以下 SQL 语句。 INSERT INTO examtable VALUES (1,’this is a string’,’2008/9/18’) INSERT INTO examtable (number1,string2,datetime3) VALUES (1,’this is a string’,’2008/9/18’) 注意:无论按照何种方法编写 SQL 语句,值和列都应该相互匹配。
从上面的步骤可以发现执行 SQL 语句是非常容易的,首先必须要打开到数据库的连接,示例代码 如下所示。 5.2.2 使用 Command 对象更新记录 编写了 SQL 语句后,必须执行 SQL 语句,在 ADO.NET 中,执行 SQL 语句有很多方法,其中推荐 使用 Command 命令的 ExecuteNonQuery()。执行 SQL 语句的命令的必要步骤如下所示。 打开数据连接。 定义一个 SQL 命令。 创建一个新的 Command 对象。 执行 SQL 命令。 关闭连接。 从上面的步骤可以发现执行 SQL 语句是非常容易的,首先必须要打开到数据库的连接,示例代码 如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); //创建连接对象 con.Open(); //打开连接
5.2.2 使用 Command 对象更新记录 Command 对象的构造函数的参数有两个,一个是需要执行的 SQL 语句,令一个是数据库连接对象。 创建 Command 对象后,就可以执行 SQL 命令,执行后完成并关闭数据连接,示例代码如下所示。 其中,str是数据连接字串,用来初始化 Connection对象,说明如何连接数据库,当数据库连接完毕后,可以使用 Open 方法打开数据连接。完成数据库连接后,需创建一个新的 Command 对象,示例 代码如下所示。 cmd.ExecuteNonQuery(); con.Close(); //执行 SQL 命令 //关闭连接 上述代码使用了 ExecuteNonQuery()方法执行了 SELECT 语句的操作,当执行完毕后就需要对现有的连接进行关闭,以释放系统资源。 SqlCommand cmd = new SqlCommand("insert into mynews value ('插入一条新数据')", con);
5.2.3 使用 DataSet 数据集插入记录 使用 INSERT 语句能够完成数据插入,使用 DataSet 对象也可以完成数据插入。为了将数据库的数 据填充到 DataSet 中,则必须先使用 DataAdapter 对象的方法实现填充,当数据填充完成后,开发人员可 以将记录添加到 DataSet 对象中,然后使用 Update 方法将记录插入数据库中。使用 DataSet 更新记录的 步骤如下所示: 创建一个 Connection 对象。 创建一个 DataAdapter 对象。 初始化适配器。 使用数据适配器的 Fill 方法执行 SELECT 命令,并填充 DataSet。 使用 DataTable 对象提供的 NewRow 方法创建新行。 将数据行的字段设置为插入的值。 使用 DataRowAdd 类的 Add 方法将数据行添加到数据表中。 把 DataAdapter 类的 InsertCommand 属性设置成需要插入记录的 INSERT 语句。 使用数据适配器提供的 Update 方法将新记录插入数据库。 使用 DataSet 类提供的 AcceptChanges 方法将数据库与内存中的数据保持一致。
5.2.3 使用 DataSet 数据集插入记录 DataAdapter 对象默认构造函数包括两个参数,其中一个参数是需要执行的 SQL 语句,另一个是 Connection 对象。在初始化适配器后,需要对适配器的相应的属性做设置,使用 SqlCommandBuilder 对 象可以让系统构造 InsertCommand 属性,示例代码如下所示。 SqlCommandBuilder build = new SqlCommandBuilder(da); //构造 SQL 语句 当使DataSet插入记录前,需要创建Connection对象以保证数据库连接,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); //创建连接字串 //创建连接对象 //打开连接 使用适配器的 Fill 方法能够填充 DataSet 数据集,示例代码如下所示。 DataSet ds = new DataSet(); da.Fill(ds, "datatable"); DataTable tb = ds.Tables["datatable"]; tb.PrimaryKey = new DataColumn[] { tb.Columns["id"] }; //创建数据集 //填充数据集 //创建表 //创建表的主键 上述代码创建了一个数据库连接,并打开了数据库连接。完成数据连接后,就需要查询表中的数据 并使用 DataAdapter 对象初始化适配器,示例代码如下所示。 string strsql = "select * from mynews"; SqlDataAdapter da = new SqlDataAdapter(strsql, con); //编写 SQL 语句 //创建适配器
5.2.3 使用 DataSet 数据集插入记录 上述代码创建了一个DataSet数据集对象,被填充数据后,数据集中表的名称被命名为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"); //更新数据
5.3.1 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 语句的编写规范,其中 如果需要更新表mytable中的某行的数据,则可以编写SQL UPDATE语句进行更新,示例代码如下所示。 UPDATE 是 SQL 更新关键字。 table_name 是需要更新的表的名称。 columnN_name 是需要更新的列的名称。 expression 是列相应的值。 WHERE 是 SQL 语句关键字。 condition 是条件。 UPDATE mytable SET title=’修改后的数据’ where id=3 上述代码更新了id 为 3的数据中的title,并将title字段的值修改为“修改后的数据”。
5.3.2 使用 Command 对象更新记录 如需要执行UPDATE语句时,同样可以使用Command 对象执行语句。Command对象基本上能够执行所有需要进行数据更新的SQL语句。使用Command对象进行数据库操作的步骤基本如下所示。 创建数据库连接。 创建一个Command对象,并指定一个SQL UPDATE(或存储过程)。 使用Command对象的ExecuteNonQuery()方法执行UPDATE(或存储过程)。 关闭数据库连接。 当需要执行UPDATE语句时,首先必须要打开到数据库的连接,打开连接后,使用Command对象执行SQL语句,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); //创建连接对象 con.Open(); //打开连接
5.3.2 使用 Command 对象更新记录 Command 对象的构造函数的参数有两个,一个是需要执行的 SQL 语句,令一个是数据库连接对象。 创建 Command 对象后,就可以执行 SQL 命令,执行后完成并关闭数据连接,示例代码如下所示。 其中,str 同样是数据连接字串,用来初始化 Connection 对象,说明如何连接数据库,当数据库连 接完毕后,可以使用 Open 方法打开数据连接。完成数据库连接后,需创建一个新的 Command 对象进 行数据更新,示例代码如下所示。 cmd.ExecuteNonQuery(); con.Close(); //执行 SQL 命令 //关闭连接 上述代码使用了 ExecuteNonQuery()方法进行 SQL UPDATE 语句的执行,从而能够更新数据库中的相应数据。 SqlCommand cmd = new SqlCommand("UPDATE mynews SET title=’修改后的数据’ where id=3", con); //创建 Command 对象
5.3.3 使用 DataSet 数据集更新记录 ADO.NET 的 DataSet 对象提供了更好的编程实现数据库的更新功能。因为 DataSet 对象与数据库始 终不是连接的,开发人员可以向脱离数据库的 DataSet 对象中增加列、删除列或更新列。当完成了修改 后,则可以通过将 DataSet 对象连接到 DataAdapter 对象来将记录传输给数据库。DataSet 更新记录的步骤如下所示。 创建一个 Connection 对象。 创建一个 DataAdapter 对象。 初始化适配器。 使用数据适配器的 Fill 方法执行 SELECT 命令,并填充 DataSet。 执行 SqlCommandBuilder 方法生成 UpdataCommand 方法。 创建 DataTable 对象并指定相应的 DataSet 中的表。 创建 DataRow 对象并查找需要修改的相应行。 更改 DataRow 对象中的列的值。 使用 Update 方法进行数据更新。
在更新记录前,首先需要查询出相应的数据,查询相应的数据后才能够填充 DataSet,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "select * from mynews"; SqlDataAdapter da = new SqlDataAdapter(strsql, con); DataSet ds = new DataSet(); da.Fill(ds, "datatable"); //创建连接字串 //创建连接对象 //打开连接 //执行查询 //使用 DataAdapter //使用 DataSet //使用 Fill 方法填充 DataSet 上述代码将查询出来的数据集保存在表为datatable的DataSet记录集中,DataSet记录集的表的名称可以按照开发人员的喜好来编写,从而区分内存中表的数据和真实的数据库的区别。当需要处理数据时, 只需要处理相应名称的表即可,示例代码如下所示。 DataTable tb = ds.Tables["datatable"];
5.3.3 使用 DataSet 数据集更新记录 da.Update(ds, "datatable"); 当需要更新某个记录时,必须在更新之前查找到该行的记录。可以使用 Rows.Find 方法查找到相应 的行,然后将数据集表中的该行的列值进行更新。使用 DataAdapter 的 Update 方法可以更新 DataSet 数 据集,并保持数据集和数据库中数据的一致性,示例代码如下所示。 当需要执行更新时,可直接使用 DataSet 对象进行更新操作来修改其中的一行或多行记录,示例代 码如下所示。 DataTable tb = ds.Tables["datatable"]; tb.PrimaryKey = new DataColumn[] { tb.Columns["id"] }; DataRow row = tb.Rows.Find(1); row["title"] = "新标题"; da.Update(ds, "datatable"); 在执行以上代码,可能会抛出异常“当传递具有已修改行的DataRow集合时,更新要求有效的UpdateCommand”。这是因为在更新时,并没有为DataAdapter对象配置UpdateCommand方法,可以通过SqlCommandBuilder对象配置UpdateCommand方法,示例代码如下所示。 SqlCommandBuilder build = new SqlCommandBuilder(da);
上述代码规范了 DELETE 语句的编写规范,其中 5.4.1 SQL DELETE 数据删除语句 使用 SQL DELETE 语句能够实现数据库中数据的更新,SQL DELETE 语句的一般语法格式如下所 示。 DELETE [FROM] {table_name} [WHERE condition1 AND|OR condition2] 上述代码规范了 DELETE 语句的编写规范,其中 SQL DELETE 相对来说比较简单,当需要对某个表中的数据进行删除时,可以使用 DELETE 语句 来执行删除操作,在编写 DELETE 语句时,需要指定表,并且指定相应的条件,示例代码如下所示。 DELETE 是 SQL 删除关键字。 FORM 是一个可以选择的关键字。 table_name 是表的名称。 WHERE 是一个 SQL 关键字。 conditionN 是执行 DELETE 命令中需要达成的若干条件。 DELETE FROM mynews WHERE ID=3 上述代码指定删除了 mynews 表中 ID 为 3 的行。如果不编写 WHERE 子句,则该表中所有的行都 能够达成删除的条件,则会删除表中所有的行,示例代码如下所示。 DELETE FROM mynews
5.4.2 使用 Command 对象删除记录 当需要执行删除语句,可以使用Command对象来删除数据库中的记录。Command对象的使用方法 在前面的SQL语句介绍中已经讲的比较多了,在删除记录时,其使用方法基本相同。使用Command对象进行数据库操作的步骤基本如下所示。 创建数据库连接。 创建一个 Command 对象,并指定一个 SQL DELETE(或存储过程)。 使用 Command 对象的 ExecuteNonQuery()方法执行 DELETE(或存储过程)。 关闭数据库连接。
5.4.2 使用 Command 对象删除记录 当需要执行DELETE语句时,首先必须要打开到数据库的连接,打开连接后,使用Command对象执行SQL语句,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); //打开连接 完成数据库连接后,需创建一个新的 Command 对象,示例代码如下所示。 SqlCommand cmd = new SqlCommand("Delete mynews where id=3", con); Command对象的构造函数的参数有两个,一个是需要执行的SQL语句,令一个是数据库连接对象。 创建Command对象后,就可以执行SQL命令,执行后完成并关闭数据连接,示例代码如下所示。 cmd.ExecuteNonQuery(); con.Close(); //执行 SQL 命令 //关闭连接
使用 DataSet 删除记录和使用 DataSet 更新记录非常的相似,DataSet 删除记录的步骤如下所示。 创建一个 Connection 对象。 创建一个 DataAdapter 对象。 初始化适配器。 使用数据适配器的 Fill 方法执行 SELECT 命令,并填充 DataSet。 执行 SqlCommandBuilder 方法生成 UpdataCommand 方法。 创建 DataTable 对象并指定相应的 DataSet 中的表。 创建 DataRow 对象并查找需要修改的相应行。 使用 Delete 方法删除该行。 使用 Updata 方法进行数据更新。
5.4.3 使用 DataSet 数据集删除记录 上述代码创建了与数据库的连接,并编写 SQL 查询语句来填充 DataSet。填充 DataSet 对象需使用 DataAdapter,示例代码如下所示。 在删除记录前,首先需要创建连接,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "select * from mynews"; SqlDataAdapter da = new SqlDataAdapter(strsql, con); SqlCommandBuilder build = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds, "datatable"); 编写完成后,需要创建 DataTable 对象对 DataSet 中相应的数据进行操作,其代码和更新记录基本 相同,示例代码如下所示。 DataTable tb = ds.Tables["datatable"]; tb.PrimaryKey = new DataColumn[] { tb.Columns["id"] }; DataRow row = tb.Rows.Find(3);
5.4.3 使用 DataSet 数据集删除记录 row.Delete(); 在进行删除之前,同样需要找到相应的行,来指定删除语句所需要删除的行,示例代码如下所示。 row.Delete(); 注意:当使用 Delete 方法删除记录行的时候,可以通过调用 DataRow 对象的 RejectChanges 方法取 消对记录的删除,当使用该方法删除记录行时,该行的状态会恢复为 Unchanged。 在删除完毕后,同样需要保持 DataSet 中的数据和数据库中的数据的一致性,示例代码如下所示。 da.Update(ds, "datatable"); 使用 Update 方法能够使 DataSet 中的数据和数据库中的数据保持一致性,在 ASP 中,这种方法也比较常见。