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~
不知道我们以后还会出现什么样的困难....但是我相信困难时可以突破的...只要有信心和毅力.....
昨天我同学就问我怎样在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~
不知道我们以后还会出现什么样的困难....但是我相信困难时可以突破的...只要有信心和毅力.....
相关文章推荐
- C#调PowerShell在SCVMM中创建虚拟机时,实时显示创建进度
- 如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 用C#创建COM组件全过程
- Android应用程序窗口(Activity)的视图对象(View)的创建过程分析
- [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 用C#创建COM组件全过程
- 使用C#创建SQL Server的存储过程
- C# winfrom判断文件是否存在,不存在则创建,否则读取值显示到窗体
- C#调PowerShell在SCVMM中创建虚拟机时,实时显示创建进度
- 存储过程创建视图Oracle
- 用C#创建COM组件全过程
- 用C#创建SQL Server的存储过程
- mysql中的存储过程、触发器、视图是如何创建的,以及PHP中是如何调用的
- 带参数的存储过程动态创建一个视图及调用方法[表不固定,作为参数]
- C#利用NPOI在同一个Excel文件中创建多个sheet
- mysql创建视图过程
- C#软件开发实例.私人订制自己的屏幕截图工具(二)创建项目、注册热键、显示截图主窗口
- C#利用NPOI在同一个Excel文件中创建多个sheet
- SQLServer2005里怎样对使用with encryption选项创建的解密存储过程、解密函数、触发器、视图
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图