21.3.3 商品信息存储实例
商品信息主要是指商品的编号、商品的名称、商品的价格等信息,在本实例中主要完成对数据表商品信息的增加、删除、修改以及查询的操作。这里结合.NET中Windows应用程序完成商品信息存储的简单功能。下面就分别讲述在.NET中如何使用Oracle数据库完成增加、删除、修改以及查询的操作。
1.查询功能的实现
在Windows应用程序中实现查询功能一般是使用前面所使用的DataGridView控件显示数据库的数据的,在这里主要实现一个显示数据库中全部数据的功能。当运行Windows窗体时就显示出数据库中全部的商品信息,可以在页面的加载事件(Load)中加入如下代码:
private void Form1_Load(object sender,EventArgs e)
{
01 OracleConnection conn=new OracleConnection(@"Data Source=orcl;
User ID=system;Password=abc123;Unicode=TRUE");
02 conn.Open();
03 OracleCommand cmd=new OracleCommand();
04 cmd.Connection=conn;
05 cmd.CommandText="select*from scott.productinfo";
06 OracleDataReader dr=cmd.ExecuteReader();
07 BindingSource bs=new BindingSource();
08 bs.DataSource=dr;
09 dataGridView1.DataSource=bs;
}
【代码解析】
❑第1行创建一个数据库的连接,这里连接的数据源是orcl,用户名是system,密码是abc123。
❑第2行打开数据库连接。
❑第3行创建一个数据库连接命令对象。
❑第4行给命令对象设置连接属性,即connection属性。
❑第5行给命令对象赋给要执行的SQL语句,该SQL语句就是要查询出产品信息表中的全部信息。
❑第6行创建数据读取对象来存放数据读取记录。
❑第7行创建绑定数据源对象,因为要给DataGridView绑定数据源,就需要用到BindingSource的对象才可以。
❑第8行给BindingSource对象设置数据源,这个数据源是前面读取数据的数据读取对象dr。
❑第9行给页面上的DataGridView控件设置数据源,这个数据源是前面用到的BindingSource对象bs。
在页面的加载事件中加入上述代码后,运行效果如图21.18所示。
图 21.18 商品管理浏览页面
在DataGridView中显示的是商品信息表中的全部记录,如果想根据条件查询可以在SQL语句上加WHERE子句来完成,也可以实现根据产品名称查询商品的功能。只要在商品浏览的页面上加一个文本框和一个查询按钮,在文本框中输入查询条件,在【查询】按钮的单击事件中加入系列代码即可。
2.增加商品信息
增加商品信息就是把商品信息添加到数据库中,在商品信息浏览界面(图21.18)中单击【添加】按钮,弹出如图21.19所示的商品信息添加界面。在文本框中输入商品的编号、商品的名称、商品的价格等信息,这里在数据库中商品的编号是主键,也就是说商品的编号是不能够重复的。一般在程序中是不用手动添加编号的,但是在这里为了能够让读者看到编号的添加就在页面上显示了。
图 21.19 添加商品页面
输入好添加的信息后,单击【确定】按钮,即可把商品信息添加到数据库中。在【确定】按钮的单击事件中加入的代码如下:
01 OracleConnection conn=new OracleConnection(@"Data Source=orcl;User ID=system;Password=abc123;
02 Unicode=TRUE");
03 conn.Open();
04 OracleCommand cmd=new OracleCommand();
05 cmd.Connection=conn;
06 cmd.CommandText="insert into scott.productinfo(productid,productname,productprice)values('"+
07 textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
08 cmd.CommandType=CommandType.Text;
09 cmd.ExecuteNonQuery();
10 conn.Close();
【代码解析】
❑第1~5行代码在商品浏览功能中已经用到过了。
❑第6~7行是给命令对象cmd的CommandText属性设置增加商品信息的SQL语句。
❑第8行设置命令对象中CommandText属性存放的类型,可以是文本、存储过程,如果不指定具体的类型,默认的类型是文本类型,也就是一般的SQL语句类型。
❑第9行执行的是增加商品信息SQL语句的操作。
3.修改商品信息
修改商品信息是在图21.18所示的页面中,选择要修改的商品,然后单击【修改】按钮,弹出修改商品信息的页面,如图21.20所示。
图 21.20 修改商品信息
可以看出在图21.20中弹出的修改产品信息窗口中已经存在了产品原有的信息,那么这个功能是如何实现的呢?在进入修改商品信息窗口之前,通过在【修改】按钮的单击事件中加入下面的代码实现:
01 string productid=dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
02 string productname=dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
03 string productprice=dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
04 UpdateProduct up=new UpdateProduct(productid,productname,productprice);
05 up.Show();
【代码解析】
❑第1~3行得到选中项的产品编码、产品名称、产品价格3个值。取得DataGridView单元格中值的方法是DataGridView的名字加上SelectedRows[0].Cells[0].Value.ToString(),SelectedRows[0]是指选中的行数,Cells[0]是指选中行的第几个单元格。这里0就代表第1个单元格产品编码,因为单元格的编号是从0开始的。
❑第4行创建修改商品信息的对象,并给修改商品信息的窗体传递参数,即产品编码、产品名称、产品价格的信息。
❑第5行使用Show方法来显示修改商品的窗体。
技巧 上面从商品浏览界面中需要传递给修改商品信息的窗体的信息只有3个,可以使用上面的方法。如果传递的信息过多,那么就不适用上面的方法,一种方式是把要传递的值存放到一个数组中传递过去;另一种方式是只传递一个商品的编号,然后在商品修改界面的加载事件即Load事件中,根据传递过来的商品编号从数据库中查询出商品的相应信息。
在把原有的信息传递给修改商品信息的页面之后,就可以对商品的信息进行修改,修改完成后,单击【确定】按钮即可。在【确定】按钮中要加入下面的代码:
01 OracleConnection conn=new OracleConnection(@"Data Source=orcl;User ID=system;Password=abc123;Unicode=TRUE");
02 conn.Open();
03 OracleCommand cmd=new OracleCommand();
04 cmd.Connection=conn;
05 cmd.CommandText="update scott.productinfo set productname="+textBox2.Text+",productprice="+textBox3.Text+"where productid="+textBox1.Text+"";
06 cmd.CommandType=CommandType.Text;
07 cmd.ExecuteNonQuery();
08 conn.Close();
【代码解析】
❑第1~4、6~8行与前面的增加商品信息的操作相同,这里就不再赘述了。
❑第5行在命令对象的CommandText中设置修改的语句。这里需要说明的是,修改商品信息来源是在界面上的文本框,获取文本框内容的方法是文本框的名称.Text方法。
在图21.20所示界面中,如果不想修改商品的信息或者修改完商品信息后取消操作,可以单击【取消】按钮,关闭修改商品的窗口。在【取消】按钮的单击事件中输入的代码如下:
this.Close();
这里,this就代表了当前的窗体,即修改商品信息的窗体。
技巧 除了上面给出的拼接SQL语句的方法之外,还可以使用string.Format方法来格式化字符串。上面的UPDATE语句可以更改为:
string sql=update scott.productinfo set productname=
"{0}",productprice="{1}"where productid="{2}";
sql=string.Format(sql,textBox2.Text,textBox3.Text,textBox1.Text);
通过上面的方法可以实现与原来的SQL语句同样的操作,并且使用这种方式不容易出现错误。这里使用{0}、{1}占位符。在格式化方法中占位符都是从0开始的,并且在给占位符赋值时,参数的个数必须要与占位符的个数相同,否则会出现错误。
4.删除商品信息
删除商品信息的功能是通过选择一条商品信息,然后单击【删除】按钮来完成的。只需要在【删除】按钮的单击事件中加入下面的代码即可:
01 string productid=dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
02 OracleConnection conn=new OracleConnection(@"Data Source=orcl;User ID=system;Password=abc123;Unicode=TRUE");
03 conn.Open();
04 OracleCommand cmd=new OracleCommand();
05 cmd.Connection=conn;
06 cmd.CommandText="delete from scott.productinfo where productid="+productid+"";
07 cmd.CommandType=CommandType.Text;
08 cmd.ExecuteNonQuery();
【代码解析】
❑第1行用来取得要删除商品信息的商品编码,因为在商品信息表中商品编码是主键,获取的是选中行的第一个单元格的内容,并把单元格中的内容转换成字符串类型。
❑第6行为命令对象的CommandText属性设置删除语句,一定要注意不要把where条件语句丢掉,否则就代表删除商品信息表中的全部记录。where条件中的商品编码就是通过第1行代码获取的商品编号。
在加入上面的代码删除商品信息时,并没有看到商品信息从商品列表中消失,这主要是因为在删除数据库中数据后没有更新页面的显示信息。如果想要在删除之后,在页面上显示已删除的记录,可以在删除数据之后,重新绑定DataGridView。重新绑定DataGridView也就是再执行本例中的Load事件中的内容。
通过上面的4个步骤就可以完成对商品信息的基本操作,相信读者已经了解了如何在.NET中连接数据库,并实现对数据库的基本操作。