版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
需要北风数据库的请留言自己的信箱。
19.4.2 新增数据
数据库数据的新增、修改和删除不同于查询,查询需要返回一个DbDataReader对象,然后使用DbDataReader获得数据,但是新增、修改和删除不需要获得数据,所以这三个操作使用OleDbCommand的ExecuteNonQuery方法即可。
【例 19.8】【项目:code19-008】向北风数据库中产品表增加数据。
……代码略
private void button1_Click(object sender, EventArgs e)
{
//新建OleDbCommand对象实例
OleDbCommand command = new OleDbCommand();
//要执行的SQL语句
command.CommandText = "insert into 产品 values(82,'红薯',12,3,'每盒12个',12.00,100,10,0,false)";
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = conn;
int recordCount;
//执行ExecuteNonQuery,返回受影响的行
recordCount = command.ExecuteNonQuery();
MessageBox.Show(recordCount + " 条数据被新增");
}
运行结果如下图所示:
图19-27 向产品表中新增一条记录
command.CommandText也可以使用类似以下的SQL语句:
command.CommandText = "INSERT INTO 产品 ( 产品名称, 供应商ID, 类别ID, 单位数量, 单价, 库存量, 订购量, 再订购量, 中止 ) values('可乐',12,1,'每件10瓶',7.6,40,10,20,false)";
这条SQL语句并没有加上产品ID这一字段,因为该字段是一个自动增加的字段,如果数据表中还有设置了默认值的字段,也可以不需要在SQL语句中加上这些字段。如产品表中“单价”、“库存量”、“订购量”、“再订购量”、“中止”都设置了默认值,因此这几个字段都可以不加在SQL语句中,当新增时,数据库自动会为它们增加上默认值:
command.CommandText = " INSERT INTO 产品 ( 产品名称, 供应商ID, 类别ID, 单位数量 ) values('可乐A',2,1, '每件6瓶')";
图19-28 产品表内增加的数据
注意:请务必小心引号的用法,由于CommandText对应是一个字符串,整个字符串应该用双引号包围,使用的SQL语句中字段的值如果是字符串的,可以使用单引号包围,或者对该值使用转义符+引号:
command.CommandText = "INSERT INTO 产品 ( 产品名称, 供应商ID, 类别ID, 单位数量, 单价, 库存量, 订购量, 再订购量, 中止 ) values(\"可乐\",12,1,\"每件6瓶\",7.6,40,10,20,false)";
【例 19.9】【项目:code19-009】使用查询参数的方式增加数据。
……代码略
private void button1_Click(object sender, EventArgs e)
{
//新建OleDbCommand对象实例
OleDbCommand command = new OleDbCommand();
//要执行的SQL语句
command.CommandText = "INSERT INTO 产品 ( 产品名称, 供应商ID, 类别ID, 单位数量, 单价) values(?,?,?,?,?)";
command.Parameters.Add("name", OleDbType.VarChar);
command.Parameters["name"].Value = "酸梅汁A"; //DBNull.Value;
command.Parameters.Add("SupplierID", OleDbType.Integer);
command.Parameters["SupplierID"].Value = 12;
command.Parameters.Add("TypeID", OleDbType.Integer);
command.Parameters["TypeID"].Value = "1";
command.Parameters.Add("info", OleDbType.VarChar);
command.Parameters["info"].Value = "每件23瓶";
command.Parameters.Add("price", OleDbType.Currency);
command.Parameters["price"].Value = "5.0";
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = conn;
int recordCount;
//执行ExecuteNonQuery,返回受影响的行
recordCount = command.ExecuteNonQuery();
MessageBox.Show(recordCount + " 条数据被新增");
}
使用查询参数方式时,需要注意Parameters的OleDbType必须要和数据表中字段的类型相对应,其次还要与字段规则相对应,例如,产品表中“产品名称”设置了“必需”,如果使用以下语句:
command.Parameters["name"].Value = DBNull.Value;
那么会抛出错误提示:
由于其 Required 属性设置为真(True),字段 '产品.产品名称' 不能包含 Null 值。在此字段中输入一个数值。
19.4.3 修改数据
【例 19.10】【项目:code19-010】修改产品表中的数据。
……代码略
private void button1_Click(object sender, EventArgs e)
{
//新建OleDbCommand对象实例
OleDbCommand command = new OleDbCommand();
//要执行的SQL语句
command.CommandText = "update 产品 set 产品名称='沙棘汁',供应商ID=3 where 产品名称='可乐A'";
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = conn;
int recordCount;
//执行ExecuteNonQuery,返回受影响的行
recordCount = command.ExecuteNonQuery();
MessageBox.Show(recordCount + " 条数据被修改");
}
//使用查询参数方式:
private void button2_Click(object sender, EventArgs e)
{
//新建OleDbCommand对象实例
OleDbCommand command = new OleDbCommand();
//要执行的SQL语句
command.CommandText = "update 产品 set 产品名称=?,供应商ID=? where 产品名称=?";
command.Parameters.Add("name", OleDbType.VarChar);
command.Parameters["name"].Value = "红茶";
command.Parameters.Add("SupplierID", OleDbType.Integer);
command.Parameters["SupplierID"].Value = 3;
command.Parameters.Add("oldname", OleDbType.VarChar);
command.Parameters["oldname"].Value = "酸梅汁A";
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = conn;
int recordCount;
//执行ExecuteNonQuery,返回受影响的行
recordCount = command.ExecuteNonQuery();
MessageBox.Show(recordCount + " 条数据被修改");
}
19.4.4 删除数据
【例 19.11】【项目:code19-011】删除产品表中的数据。
……代码略
private void button1_Click(object sender, EventArgs e)
{
//新建OleDbCommand对象实例
OleDbCommand command = new OleDbCommand();
//要执行的SQL语句
command.CommandText = "delete * from 产品 where 产品名称='红茶'";
//设置OleDbCommand的数据连接为OleDbConnection
command.Connection = conn;
int recordCount;
//执行ExecuteNonQuery,返回受影响的行
recordCount = command.ExecuteNonQuery();
MessageBox.Show(recordCount + " 条数据被删除");
}
使用查询参数方式删除数据的代码同之前的例子,这里不再累述。
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录