最近我们小组一直在忙着做我们软件班的作业..我们做的学生宿舍管理系统..很小的一个软件...
昨天我同学就问我怎样在listview上显示多个表中他想要显示的信息...由于我只是一个对C#感兴趣的通信工程专业的学生...对数据库不怎么了解...所以这个问题我一时答不上来...但是这个功能是必须要的....所以我回到实验室上网查了下资料.....原来是可以实现的...不过要通过视图....
在SQL中,一个视图是基于某个SELECT 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的域就是来自一个或多个数据库中的真实的表中的域。我们可以向试图添加SQL函数、WHERE以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。
视图的概念我明白..简单的说就是一个"中间表"...里面存着多个表中你要显示的列.....这些列是你从多个表中提取出来的...但是就是不知道怎样在VS2008中创建一个视图....到今天早上才弄明白.....现在跟大家分享下...呵呵...
举个很简单的例子吧....
看这个界面
我要实现的功能是当我输入学生的学号后 单击下面的OK按钮就会显示他的名字、他所在的宿舍和所在的楼号...
现在来建视图:
首先在服务器资源管理器上选择你用的数据库 然后单击右键选择新建查询
然后就会出来这个对话框
选择你要显示出来的列所在的数据表....我选择的是T_DormBuilding 、 T_Dormitory 和T_Student(按住CTRL键多选) 这三个表 ,然后点击添加 就会出来下面的
这里得注意了 这里表与表之间的关系和E-R图中的要一样、因为这三个表出来后系统会自动给你确定他们的关系...这里得自己改下 ,改好后选择你要显示的列....然后在下面就会出现
这里得说明下 为了防止这个视图中出现同样的列名..也为了以后写代码方便 最好给相同的列起个别名...像我上面就起了两个...系统会自动生成一段SELECT 语句...
完成后就单击这个按钮 然后就会出现下面的这个数据表
当然了 我这里是有数据的...如果大家三个表里对应有数据的话这个表也会出来数据的...
下面就是怎样用程序来实现创建视图了
双击窗体上的创建视图按钮 在里面添加如下代码
- private void btnUse_Click(object sender, EventArgs e)
- {
- try
- {
- string SQL = "CREATE VIEW GetStudent AS SELECT T_Student.F_Number, T_Student.F_Name, T_Dormitory.F_Number AS DorNo, " +
- "T_DormBuilding.F_Number AS FloorNo " +
- "FROM ((T_Student INNER JOIN T_Dormitory ON T_Student.F_DormitoryID = T_Dormitory.F_ID) " +
- " INNER JOIN T_DormBuilding ON T_Dormitory.F_DormBuildingNo = T_DormBuilding.F_Number)";
- TService.DoExecute(SQL, null, null);
- }
- catch (Exception Err)
- {
- MessageBox.Show(Err.Message);
- }
- }
当然了 我这里调用了我们服务类里的一个函数 SQL语句AS后面的就是在选择要显示的列并起别名后系统自动生成的那个SELECT语句...
- public static class TService
- {
- /// <summary>
- /// 数据库连接信息
- /// </summary>
- public static string Connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/asp.net程序/学生宿舍管理系统/database/学生宿舍管理系统.mdb";
- public static OleDbConnection _Conn = null;
- public static OleDbConnection Conn()
- {
- if (_Conn == null)
- {
- _Conn = new OleDbConnection(Connstr);
- _Conn.Open();
- }
- return _Conn;
- }
- public static int DoExecute(string SQL, string[] AParaNames, object[] AParaValues)
- {
- int Ares = 0;
- try
- {
- OleDbCommand Acmd = new OleDbCommand(SQL, Conn());
- if (AParaNames != null)
- {
- for (int i = 0; i < AParaNames.Length; i++)
- {
- OleDbParameter Ap = new OleDbParameter(AParaNames[i], AParaValues[i]);
- Acmd.Parameters.Add(Ap);
- }
- }
- Acmd.ExecuteNonQuery();
- Ares = 1;
- }
- catch(Exception Err)
- {
- Ares = 0;
- MessageBox.Show(Err.Message);
- }
- return Ares;
- }
这样一个视图就创建好了....
然后双击窗体上的OK按钮 写入如下程序
- private void btnOK_Click(object sender, EventArgs e)
- {
- string ACode = txtCode.Text;
- try
- {
- string SQL = "SELECT * FROM GetStudent WHERE F_Number=@ACode";
- string[] Apn = new string[] { "@ACode" };
- object[] Apv = new object[] { ACode };
- DataTable Adt = TService.GetDataTable(SQL, Apn, Apv);
- if (Adt.Rows.Count >0)
- {
- txtName.Text = Adt.Rows[0]["F_Name"].ToString();
- txtFloor.Text = Adt.Rows[0]["FloorNo"].ToString();
- txtDormitory.Text = Adt.Rows[0]["DorNo"].ToString();
- }
- else
- {
- MessageBox.Show(" 没有相应的数据! ");
- }
- }
- catch(Exception Err)
- {
- MessageBox.Show(Err.Message);
- }
- }
按F5运行后 先点击下创建视图那个按钮 然后在输入学号 例如我输入20062084 当我单击了OK按钮后就出来下面的
这样我要显示的信息就显示出来了.....
创建视图这个按钮第一次运行的时候按一下就可以了 不然会提示你那个视图已经存在了的....
好了...收工.....本人文采不是很好.....希望大家能指出其中的不足....你指出来的问题是我前进的脚步....O(∩_∩)O~
不知道我们以后还会出现什么样的困难....但是我相信困难时可以突破的...只要有信心和毅力.....