您的位置:首页 > 编程语言 > C#

C#创建显示多个表中你要显示的列-----视图的创建过程.....

2009-07-24 14:08 211 查看
最近我们小组一直在忙着做我们软件班的作业..我们做的学生宿舍管理系统..很小的一个软件...

昨天我同学就问我怎样在listview上显示多个表中他想要显示的信息...由于我只是一个对C#感兴趣的通信工程专业的学生...对数据库不怎么了解...所以这个问题我一时答不上来...但是这个功能是必须要的....所以我回到实验室上网查了下资料.....原来是可以实现的...不过要通过视图....

在SQL中,一个视图是基于某个SELECT 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的域就是来自一个或多个数据库中的真实的表中的域。我们可以向试图添加SQL函数、WHERE以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。

视图的概念我明白..简单的说就是一个"中间表"...里面存着多个表中你要显示的列.....这些列是你从多个表中提取出来的...但是就是不知道怎样在VS2008中创建一个视图....到今天早上才弄明白.....现在跟大家分享下...呵呵...

举个很简单的例子吧....

看这个界面



我要实现的功能是当我输入学生的学号后 单击下面的OK按钮就会显示他的名字、他所在的宿舍和所在的楼号...

现在来建视图:

首先在服务器资源管理器上选择你用的数据库 然后单击右键选择新建查询



然后就会出来这个对话框



选择你要显示出来的列所在的数据表....我选择的是T_DormBuilding 、 T_Dormitory 和T_Student(按住CTRL键多选) 这三个表 ,然后点击添加 就会出来下面的



这里得注意了 这里表与表之间的关系和E-R图中的要一样、因为这三个表出来后系统会自动给你确定他们的关系...这里得自己改下 ,改好后选择你要显示的列....然后在下面就会出现



这里得说明下 为了防止这个视图中出现同样的列名..也为了以后写代码方便 最好给相同的列起个别名...像我上面就起了两个...系统会自动生成一段SELECT 语句...

完成后就单击这个按钮

然后就会出现下面的这个数据表



当然了 我这里是有数据的...如果大家三个表里对应有数据的话这个表也会出来数据的...

下面就是怎样用程序来实现创建视图了

双击窗体上的创建视图按钮 在里面添加如下代码

Code:

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语句...

Code:

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按钮 写入如下程序

Code:

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~

不知道我们以后还会出现什么样的困难....但是我相信困难时可以突破的...只要有信心和毅力.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: