数据库数据查询
实验九数据库数据查询
一.实验目的:
理解并掌握利用.net和Delphi、Java(JBuilder或Eclipse)等编程平台进行数据库访问的基本过程,熟悉数据库访问方法。二.实验属性:
设计性。
三.实验仪器设备及器材:
1.安装有windows操作系统计算机。
2.安装有Oracle11g和SQL Server的计算机。
3.安装有Visual Studio .net和Java编译器(eclipse、
Netbean等)的编译器。
4.计算机具备网络环境。
四.实验要求
1.预习数据库访问的方式:
i.对于Delphi通过BDE、ODBC和ADO三种访问方法。
ii.对于.net编译环境连接Oracle需要熟练掌握数据库连接方法:
OracleConnection。
iii.对于.net编译环境要熟练掌握三种数据库连接方法:SqlConnection(或者OleDbConnection,或者OdbcConnection);
SqlCommand(或者OleDbCommand,或者OdbcCommand);
SqlDataReader(或者OleDbDataReader,或者OdbcDataReader);
iv.对于java使用JDBC进行数据库连接。
1.调用Driver.forName方法加载驱动程序。
2.调用DriverManager对象的getConnection()方法,
获得一个Connection对象。
3.创建一个Statement对象,准备一个SQL语句,这
个SQL语句是Statement对象(立即执行的语句)、
PreparedStatement语句(预编译的语句)或
CallableStatement(存储过程中调用的语句)。
4.调用executeUpdate()等方法执行SQL语句,不返
回ResultSet对象的结果。
5.对返回的ResultSet对象进行显示等相应的处理。
2.熟悉掌握数据库数据查询的组件:
a)对于.net和Delphi编译环境
ADO组件栏的组件:TADOConnection、TADOTable、TADOQuery、TADOStoredProc
BDE组件栏的组件:TTable、TQuery、TStoredProc、TDatabase
DataAccess组件栏的组件:TdataSource
DataControl组件栏的组件:TDBGrid、TDBText、
TDBMemo、TDBEdit、
TDBImage、TDBListBox、
TDBCheckBox、TDBComboBox 等数据库操作常用组件的使用。
b)对于.net环境下的C#语言数据库编程,熟练掌握三种数据库连接方法。数据库操作类的使用,如:DataSet、SqlDataAdapter、dataGridView等。
c)对于Java(JBuilder或Eclipse)编译环境利用JDBC进行数据库连接。数据库连接后使用Database、QueryDataSet、TableDataSet、DataSetView等类进行数据库操作。
2. 接着上次的实验进行。
3.实验中要求完成如下步骤:
a.复合查询。
给定一定的查询字段,有用户进行选择进行查询。注
意使用模糊匹配。
b.动态查询。
给出数据库的所有字段,有用户选择后进行查询。对
于不同的字段类型,由程序自动给出操作运算符,如
果用户选择了一个数据类型是char型的字段,操作运
算符只能是“=”,“< >”。注意使用模糊匹配。
4.实验后提交程序清单和实验报告。
五、实验步骤
在该对话框类Form1中定义静态类用于数据库的操作static public LinkDataBase ldb = new LinkDataBase();
点击登录按钮是所运行的操作
private void button1_Click(object sender, EventArgs
e)
{
if(textBox1.Text.Trim()=="")
{
MessageBox.Show("计算机名不能为空!!!!!","提示",MessageBoxButtons.OK);
return;
}
ldb.pcomputername = textBox1.Text.Trim();
if (ldb.Link() == "连接失败")
return;
if (ldb.login(textBox2.Text.Trim(), textBox3.Text.Trim()))
{
this.Hide();
Query f = new Query();
f.ShowDialog();
this.Close();
}
}
3、数据库查询界面及其中操作的设置
界面设计:
作用于“查询某学生的信息”界面的关键代码:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
https://www.360docs.net/doc/473763909.html,mandText = @"SELECT *
FROM Student
WHERE Sname LIKE @name";
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@name",
SqlDbType.VarChar, 8).Value =textBox1.Text.Trim();
Form1.ldb.Show(dataGridView1);
statusStrip1.Items[1].Text=("共查到"+(dataGridView1.RowCount-1).ToString()+"条记录");
}
else
MessageBox.Show("姓名不能为空!!!");
}
作用于“按选择条件查询”界面的关键代码
private void button2_Click(object sender, EventArgs e)
{
string str = "";
if (comboBox2.Text == "" || comboBox1.Text == "" || textBox2.Text=="")
{ MessageBox.Show("不能为空");
return; }
switch(log)
{case 1:
str = "";
switch(comboBox1.Text)
{case "成绩大于":str = ">";
break;
case "成绩大于等于":str=">=";
break;
case "成绩小于":str = "<";
break;
case "成绩小于等于":str = "<=";
break;
case "成绩等于":str = "=";
break;
case "成绩不等于":str = "!=";
break;
default: MessageBox.Show("输入有误");
return; }
str = @"SELECT Sname 姓名,Cname 课程名,Grade
成绩
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno And https://www.360docs.net/doc/473763909.html,o=https://www.360docs.net/doc/473763909.html,o AND
Grade"+str+"@grade";
https://www.360docs.net/doc/473763909.html,mandText = str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@grade",SqlDbType. VarChar,10).Value=textBox2.Text.Trim();
break;
case 2:
str = "";
switch(comboBox1.Text.Trim()) {case "在":str = "=";
break;
case "不在":str = "!=";
break;
default: MessageBox.Show("输入有误");
return; }
str = @"SELECT Sno 学号,Sname 姓名,Sdept 院系
FROM Student
WHERE Sdept"+str+"@dept";
https://www.360docs.net/doc/473763909.html,mandText = str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@dept",SqlDb Type.VarChar,15).Value=textBox2.Text.Trim();
break;
case 3:
str = "";
switch(comboBox1.Text.Trim())
{
case "年龄大于": str = ">";break;
case "年龄大于等于": str = ">="; break;
case "年龄小于": str = "<";break;
case "年龄小于等于": str = "<=";break;
case "年龄等于": str = "=";break;
case "年龄不等于": str = "!=";break;
default: MessageBox.Show("输入有误");return;
}
str = @"SELECT *
FROM Student
WHERE Sage"+str+"@age";
https://www.360docs.net/doc/473763909.html,mandText = str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@age",SqlDbType.V arChar,3).Value=textBox2.Text.Trim();
break;
case 4:
str = "";
switch(comboBox1.Text.Trim())
{
case "选修了": str = "=";
break;
case "未选修": str = "!=";
break;
default: MessageBox.Show("输入有误");
return;
}
str = @"SELECT Student.Sno 学号,Sname 姓名,Cname 课程名
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND https://www.360docs.net/doc/473763909.html,o=https://www.360docs.net/doc/473763909.html,o AND Cname"+str+"@name";
https://www.360docs.net/doc/473763909.html,mandText = str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@name",SqlDbType.V arChar,10).Value=textBox2.Text.Trim();
break;
}
Form1.ldb.Show(dataGridView2);
statusStrip1.Items[1].Text=("共查到"+(dataGridView2.RowCount-1).ToString()+"条记录");
}
作用于“查询某学生的选课情况”界面的关键代码
private void button3_Click(object sender, EventArgs
e)
{https://www.360docs.net/doc/473763909.html,mandText = @"SELECT Cno 课程号,Cname 课程名,Cpno 先修课程号,Ccredit 学分
FROM Course
WHERE Cno IN (
SELECT Cno
FROM SC
WHERE Sno IN (
SELECT Sno
FROM Student WHERE
Sname=@name
)
)";
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@name",SqlDbType.V arChar,10).Value=textBox3.Text.Trim();
Form1.ldb.Show(dataGridView3);
statusStrip1.Items[1].Text = "共选修"+(dataGridView3.RowCount-1).ToString()+"门课程";
}