9.2 ASP.NET创建和插入记录

  在数据库操作中,经常需要对数据库中的内容进行插入操作。例如当有一个用户发布了评论,或者一个用户要购买某个商品,都需要插入记录来保存用户的相应的信息,以便当用户再次登录网站或应用时,能够及时获取自己购买的信息。

9.2.1 SQL INSERT数据插入语句
  使用SQL INSERT语句能够实现数据库的插入,SQL语句必须遵照一些规范,SQL INSERT语句的一般语法形式如下所示:
+展开
-SQL
    INSERT [INTO]
    {table_name}
    {
     [(column_list)]
     {
     VALUES({DEFAULT|NULL|expression} [,…n])
    }
    }

上述代码规范了INSERT语句的编写规范,其中:
1)INSERT是SQL插入关键字。
2)[INTO]是表名称之前能够包含的可选关键字。
3)Table_name是相关的表名称。
4)column_list是列的集合,如果有多个列可用都好隔开。
5)VALUES是相应的列的值。
  如果需要向表mytables插入数据,而mytables里包括自动增长的主键id和title两列,则INSERT语句可以编写为如下代码。
+展开
-SQL
    INSERT INTO mytables VALUES (‘新的新闻标题’)

  上述代码向表mytables中插入了一条新记录,并将title赋值为“新的新闻标题”。值得注意的是,在这条语句中,并没有编写列的集合,是因为当不编写column_list时,则默认为每一个列插入数值。
注意:自动增长的主键类型的字段,无需向数据中插入数值,因为SQL Server会自动为该列赋值。
  如果需要当插入数据时,需要指定插入相应的列的值,则可以将SQL语句代码编写如下。
+展开
-SQL
    INSERT INTO mytables (title) VALUES (‘新的新闻标题’)

  上述代码指定了列title,并对应了相应的值。若在表中存在多个列,列的顺序和列相应的值的顺序必须匹配。例如有3列并分别为number1,string2,datetime3,当需要向其中插入数据时,则可以编写以下SQL语句。
+展开
-SQL
    INSERT INTO examtable (number1,string2,datetime3) VALUES (1,’this is a string’,’2008/9/18’)

  上述代码编写了INSERT语句以便数据的插入,同样在插入语句中如果需要插入所有的列,可以简化INSERT语句以便快速进行数据插入,示例代码如下所示。
+展开
-SQL
    INSERT INTO examtable VALUES (1,’this is a string’,’2008/9/18’)

  值得注意的是,无论按照何种方法编写SQL语句,值和列都应该相互匹配。

9.2.2 使用Command对象更新记录
  编写了SQL语句后,必须执行SQL语句,在ADO.NET中,执行SQL语句有很多方法,其中推荐使用Command命令的ExecuteNonQuery()。执行SQL语句的命令的必要步骤如下所示。
1)打开数据连接。
2)创建一个新的Command对象。
3)定义一个SQL命令。
4)执行SQL命令。
5)关闭连接。
  从上面的步骤可以发现执行SQL语句是非常容易的,首先必须要打开到数据库的连接,示例代码如下所示。
+展开
-C#
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";
            SqlConnection con = new SqlConnection(str); //创建连接对象
            con.Open();//打开连接

  其中,str是数据连接字串,用来初始化Connection对象,说明如何连接数据库,当数据库连接完毕后,可以使用Open方法打开数据连接。完成数据库连接后,需创建一个新的Command对象,示例代码如下所示。
+展开
-C#
SqlCommand cmd = new SqlCommand("insert into mynews value ('插入一条新数据')", con);

  Command对象的构造函数的参数有两个,一个是需要执行的SQL语句,令一个是数据库连接对象。创建Command对象后,就可以执行SQL命令,执行后完成并关闭数据连接,示例代码如下所示。
+展开
-C#
cmd.ExecuteNonQuery();//执行SQL命令
con.Close();//关闭连接

  上述代码使用了ExecuteNonQuery()方法执行了SELECT语句的操作,当执行完毕后就需要对现有的连接进行关闭,以释放系统资源。

9.2.3 使用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对象以保证数据库连接,示例代码如下所示。
+展开
-C#
string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";//创建连接字串
SqlConnection con = new SqlConnection(str);//创建连接对象
con.Open();打开连接

  上述代码创建了一个数据库连接,并打开了数据库连接。完成数据连接后,就需要查询表中的数据并使用DataAdapter对象初始化适配器,示例代码如下所示。
+展开
-C#
string strsql = "select * from mynews";//编写SQL语句
SqlDataAdapter da = new SqlDataAdapter(strsql, con);//创建适配器

  DataAdapter对象默认构造函数包括两个参数,其中一个参数是需要执行的SQL语句,另一个是Connection对象。在初始化适配器后,需要对适配器的相应的属性做设置,使用SqlCommandBuilder对象可以让系统构造InsertCommand属性,示例代码如下所示。
+展开
-C#
SqlCommandBuilder build = new SqlCommandBuilder(da);//构造SQL语句

  使用适配器的Fill方法能够填充DataSet数据集,示例代码如下所示。
+展开
-C#
            DataSet ds = new DataSet();//创建数据集
            da.Fill(ds, "datatable");//填充数据集
            DataTable tb = ds.Tables["datatable"];//创建表
            tb.PrimaryKey = new DataColumn[] { tb.Columns["id"] };//创建表的主键

  上述代码创建了一个DataSet数据集对象,被填充数据后,数据集中表的名称被命名为datatable,该命名与数据库中的表的名称并不冲突。填充了DataSet数据对象后,需要使用DataRow对象为DataSet添加数据,示例代码如下所示。
+展开
-C#
            DataRow row = ds.Tables["datatable"].NewRow();//创建DataRow
            row["title"] = "使用DataSet插入新行"; //赋值新列
            row["id"] = "15";

  上述代码使用了NewRow方法创建新行返回DataRow对象,当DataRow对象中的相应的元素被赋值后,则需要使用Rows.Add方法增加新行,因为只对DataRow对象赋值,并不能自动的在数据库中增加新行。示例代码如下所示。
+展开
-C#
            ds.Tables["datatable"].Rows.Add(row); //添加新行

上述代码将数据更新到DataSet数据集中,为了保持数据集中的数据和数据库的数据的一致性,需使用Update方法,示例代码如下所示。
+展开
-C#
            da.Update(ds, "datatable");//更新数据

当执行了Update方法后,数据库中的数据就会同步DataSet数据集中的数据进行数据更新。

加支付宝好友偷能量挖...


评论(0)网络
阅读(100)喜欢(0)Asp.Net/C#/WCF