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.3.3 商品信息存储实例 - 图1

图 21.18 商品管理浏览页面

在DataGridView中显示的是商品信息表中的全部记录,如果想根据条件查询可以在SQL语句上加WHERE子句来完成,也可以实现根据产品名称查询商品的功能。只要在商品浏览的页面上加一个文本框和一个查询按钮,在文本框中输入查询条件,在【查询】按钮的单击事件中加入系列代码即可。

2.增加商品信息

增加商品信息就是把商品信息添加到数据库中,在商品信息浏览界面(图21.18)中单击【添加】按钮,弹出如图21.19所示的商品信息添加界面。在文本框中输入商品的编号、商品的名称、商品的价格等信息,这里在数据库中商品的编号是主键,也就是说商品的编号是不能够重复的。一般在程序中是不用手动添加编号的,但是在这里为了能够让读者看到编号的添加就在页面上显示了。

21.3.3 商品信息存储实例 - 图2

图 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.3.3 商品信息存储实例 - 图3

图 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中连接数据库,并实现对数据库的基本操作。