一步一步教你C#连接Oracle数据库制作学生成绩管理系统
改版 1.1
说明:在之前的时候不怎么会,但是由于c#很久没学了,所以今天在内容界面对教程进行优化展示给大家,后续如果继续改版将会继续优化:2021.10.18
需要下载的软件
最近通过网络学习了该怎么用C#连接Oracle数据库制作一个管理软件,说实话,网络上连接Oracle的教程非常少,一般都是使用MYSQL,但是我通过学习对比发现,不管是连接Oracle还是连接MYSQL其实代码都大同小异。
之所以使用Oracle是因为学校老师要求的,不能够使用别的数据库
废话不多说,你需要使用到的Oracle11g以及Visual Studio 2017,主要是我使用这两个版本的软件,其他版本可能操作上会和我有所不同,此外,你还需要从网络上下载一个插件:Oracle.ManagedDataAccess.dll,有这个插件才可以调用引用,连接上Oracle,
**这个插件是集成了Oracle数据库的包,在后续代码调用数据库并连接数据库必须要有**
在Oracle上先创建用户以及表
要连接上Oracle,首先要在Oracle上创建一个
用户,并为你创建的用户设定监听,如我创建了一个用户:xsgl,密码:123456,则使用cmd命令连接Oracle,先创建一个表空间,代码如下:
//创建表空间
create tablespace xsgl_tbs
//路径为D:\xsgl\ xsgl.dbf,大小10m
datafile 'D:\xsgl\ xsgl.dbf' size 10m
//自动扩展
autoextend on
//扩展大小为1m
next 1m
//扩展最大限制:无限制
maxsize unlimited
并使用代码:
//创建用户:xsgl
create user xsgl
//密码:123456
identified by 123456
//为表空间xsgl_tbs创建用户
default tablespace xsgl_tbs
在刚刚创建的表空间里创建用户xsgl
cmd命令
//在刚刚创建了用户的情况下登录
sqlplus xsgl/123456
登录刚刚创建的用户
接着使用代码:
//创建成绩表,表名:score
create table score
(
snum varchar(10) not null primary key, //学生学号
sname Varchar(20) not null unique, //学生姓名
score int(5) not null, //学生成绩
Lesson Varchar(20) not null //学习的课程
)
tablespace xsgl_tbs
在用户里创建一个成绩表
到这里Oracle方面的代码就简单弄好了。
用C#创建一个窗体工程
打开Visual studio,点击文件-新建-项目,找到visual C#下的windows桌面,选中windows窗体应用创建项目
C#登陆界面
之后就可以使用左边工具箱“画”出来你想要的界面
这里你需要用的工具箱里的大致有Label,Button,TextBox,Radiobutton以及DataGridView(如没有在工具箱找到点开工具箱搜索)
以下我创建了一个简单的登录界面,里面有三个角色:教师,学生以及管理员,教师可以查询所有学生的成绩,学生只能查询自己的成绩,管理员可以对数据库里表的数据进行增删改查。
在“画”完登录界面后,有一个必须得注意,那就是你插入的textbox,radiobutton指针名字,因为你之后要在输入框里输入账号和密码登录,需要调用它,就要知道textbox以及radiobutton的名字,可以在右下角指针的属性修改,也可以默认名字,不过这就需要你们记住名字了。
这一步的目的是为了标识各个文本框、按钮的名字,好在代码进行调用,
接着双击对登录Button按钮进行写入代码实现输入用户名和密码以及选择角色的时候跳转到第二个界面,跳转界面需要你添加第二个窗体,找到右边的解决方案资源管理器里你创建的项目名右击,选中添加-新建项-windows窗体,这样第二个窗体就创建成功了,如果要跳转别的界面也是按照这个方法。
接着对登录的button按钮双击写入代码实现跳转,以下是登录按钮代码:
//使用if语句判断
if (user.Text == "333" && password.Text == "333"&&manager.Checked)//管理员
{
//定义form=2窗口
var form = new Form2();
form.Show();//这里显示另一个窗口
this.Hide();//这里隐藏当前窗口
}
else if (user.Text == "111" && password.Text == "111" && teacher.Checked)//教师
{
//定义form=3窗口
var form = new Form3();
form.Show();//这里显示另一个窗口
this.Hide();//这里隐藏当前窗口
}
else if (user.Text == "222" && password.Text == "222" && student.Checked)//学生
{
//定义form=4窗口
var form = new Form4();
form.Show();//这里显示另一个窗口
this.Hide();//这里隐藏当前窗口
}
else
{
System.Windows.Forms.MessageBox.Show("输入错误!");
}
如此用户名:111 密码:111 角色:教师则跳转Form3窗体
用户名:222 密码:222 角色:学生跳转Form4窗体
用户名:333 密码:333 角色:管理员跳转Form2窗体
其他情况弹出消息:输入错误!
如有需要自行更改用户名以及密码。
登录管理员实现增删改查
主要的操作都是通过管理员角色实现增删改查的,下面开始对它进行编程。
当然在这之前依旧是“画”出来界面跳到相应的功能界面:
这个界面用来跳转,以下是按钮代码例子,每个按钮跳转的不同的界面:
//跳转到录入学生成绩界面,需要创建窗口6作为录入成绩界面,该名称为Form6
//其他同理
private void button5_Click(object sender, EventArgs e)
{
var form = new Form6();//跳转界面Form6,
form.Show();
this.Hide();
}
//跳转到删除学生成绩界面
private void button5_Click(object sender, EventArgs e)
{
var form = new Form7();//跳转界面Form6,
form.Show();
this.Hide();
}
//跳转到修改学生成绩界面
private void button5_Click(object sender, EventArgs e)
{
var form = new Form8();//跳转界面Form6,
form.Show();
this.Hide();
}
//跳转到查询学生成绩界面
private void button5_Click(object sender, EventArgs e)
{
var form = new Form9();//跳转界面Form6,
form.Show();
this.Hide();
}
在实现功能前,有一个最最重要的步骤,那就是连接上Oracle,在这一步上我以及失败了很多次了,然后终于被我找个该怎么稳定的连接上数据库。
第一步:你需要使用cmd命令登录oracle里你创建的用户。
第二步:将下载的Oracle.ManagedDataAccess.dll插件添加到解决方案资源管理器下的引用,这步也比较重要,必须是引用的里面,而不能是外面
第三步:找到你安装Oracle里的根目录,打开\product\11.2.0\dbhome_1\NETWORK\ADMIN目录下的tnsnames.ora,里面有配置连接Oracle的详细信息,如:
以下是标注
//XSGL为创建的表空间,用双斜杠标注的请不要直接复制到代码,它配置文件的注释是#+空格,而不是//
XSGL=
//description为描述的意思,懂英文就能理解
(DESCRIPTION=
//地址列表信息
(ADDRESS_LIST=
//地址采用TCP协议,本地地址HOST为:自己的电脑主机名称,在电脑系统-关于里可以看到
//应该也是可以换成本地的IP,把HOST的内容修改为localhost或127.0.0.1
//如果不行就换回主机名称即可
//PORT为使用的端口,如提示端口被占用,可以百度搜索怎么关掉端口重新运行即可
(ADDRESS = (PROTOCOL=TCP) (HOST = DESKTOP-JDBDU3F)(PORT = 1521))
)
//连接数据
(CONNECT_DATA=
//服务名称为xsgl
(SERVICE_NAME = xsgl)
)
)
这个是我电脑oracle的配置数据,找到后不要关掉,然后接下来实现增删改查。
录入学生成绩
这个是我的录入成绩界面,“画”好界面后双击录入按钮编写代码,在编写之前先说说连接数据库,连接数据库代码是:
//定义一个字符串connString,让connString等于数据库信息
string connString = "Data Source=(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)(HOST = DESKTOP-JDBDU3F)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = xsgl)
)
);
//连接数据库,用户名为xsgl,密码123456
Persist Security Info=True;User ID=xsgl;Password=123456;";
里面的数据对应刚刚的tnsnames.ora里的配置数据自行修改。
以下是录入按钮代码:
string connString = "Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-JDBDU3F)(PORT = 1521)) )(CONNECT_DATA =(SERVICE_NAME = xsgl) ));Persist Security Info=True;User ID=xsgl;Password=123456;";
//只有引用了Oracle.ManagedDataAccess.dll插件才可以识别OracleConnection
//创建OracleConnection对象,定义名称为conn,并将刚刚的connString数据库语句添加到对象
OracleConnection conn = new OracleConnection(connString);
//打开连接,使用定义的名称conn,调用Open命令
conn.Open();
//这几条语句根据自己创建的表修改
//textBox1、textBox2、textBox3、textBox4为4个文本框依次标志的识别名称,上面有讲到
//定义字符串sid、sname、score、lesson分别等于四个文本框输入的内容
String sid = this.textBox1.Text;//学号
String sname = this.textBox2.Text;//姓名
String score = this.textBox3.Text;//分数
String lesson = this.textBox4.Text;//课程
//定义command=“数据库插入语句,分别插入到创建的score表的snum,sname,score,slesson字段”
//需要注意的是字段需要一一对应,如果乱了就会出现类似于在姓名插入课程的现象等
var commandText = "insert into score (snum,sname,score,slesson) values('"+sid+"','"+sname+"','"+score+"','"+lesson+ "')";
//调用oracle数据库连接,创建对象,标志名为connection
using (OracleConnection connection = new OracleConnection(connString))
{
//调用数据库执行数据库语句,创建对象,标志名:command,插入刚刚写的插入语句到数据库中
using (OracleCommand command = new OracleCommand(commandText, connection))
{
//log.Error("查询数据库1command" + command);
//打开数据库
command.Connection.Open();
//log.Error("查询数据库2command" + command);
int result = command.ExecuteNonQuery();
//关闭数据库连接
command.Connection.Close();
MessageBox.Show("录入成功!");
}
}
此外,返回按钮是跳转界面的代码。
删除学生成绩
和录入学生成绩代码同理,先连接数据库,再对表进行操作,代码如下:
string connString = "Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-JDBDU3F)(PORT = 1521)) )(CONNECT_DATA =(SERVICE_NAME = xsgl) ));Persist Security Info=True;User ID=xsgl;Password=123456;";
OracleConnection conn = new OracleConnection(connString);
//以上和录入注释同理
//定义MYDelete字符串="通过学号删除数据"
//textBox1文本框的标志名
string MyDelete = "Delete from students where snum=" + textBox1.Text;
//将MyDelete字符串传入数据库,执行删除数据的操作
OracleCommand mycommand = new OracleCommand(MyDelete, conn);
try
{
conn.Open();
mycommand.ExecuteNonQuery();
conn.Close();
//输入完成后让文本框等于空,不显示字符串
textBox1.Text = "";
MessageBox.Show("删除成功!");
}
catch (Exception ex)
{
//学号错误报错提示
Console.WriteLine("{0} Exception catch.", ex);
}
修改学生成绩
代码如下:
//修改成绩操作
string connString = "Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-JDBDU3F)(PORT = 1521)) )(CONNECT_DATA =(SERVICE_NAME = xsgl) ));Persist Security Info=True;User ID=xsgl;Password=123456;";
OracleConnection conn = new OracleConnection(connString);
string sname = textBox2.Text;
string score = textBox3.Text;
string lesson = textBox4.Text;
//定义update=“更新数据库语句”
string update = "Update score set sname='" + sname + "',score='" + score + "',lesson='" + lesson + "'where snum=" + textBox1.Text;
//传入update到数据库进行修改
OracleCommand mycommand = new OracleCommand(update, conn);
try
{
conn.Open();
mycommand.ExecuteNonQuery();
conn.Close();
textBox1.Text = "";
MessageBox.Show("修改成功!");
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
查询学生成绩
查询是按照学号查询,使用了datagridview指针,在输入框输入学号,会在下面显示录入的信息,它的代码和教师查询成绩的代码相同,以下是代码:
//管理员和老师查询
//查询操作,搜索学号,在文本域datagridview显示数据
try
{
string connString = "Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-JDBDU3F)(PORT = 1521)) )(CONNECT_DATA =(SERVICE_NAME = xsgl) ));Persist Security Info=True;User ID=xsgl;Password=123456;";
OracleConnection conn = new OracleConnection(connString);
//定义str=“查询数据库语句”
string str = "select snum,sname,score,slesson from score where snum=" + textBox1.Text;
//定义cmd标志数据库执行数据库操作
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = str;
conn.Open();
OracleDataAdapter oraDA = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
oraDA.Fill(ds);
conn.Close();
DataTable dtbl = ds.Tables[0];
//将数据库查询到的数据添加到文本域中
this.dataGridView1.DataSource = dtbl;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误");
}
学生成绩查询
到这里学生成绩管理系统基本弄好了,那么最后一个就是学生查询成绩,他只能查询自己的成绩,我这里用了一个比较取巧的方法,用if语句判断他只能查询一号,否则弹出输入错误的消息。
代码如下:
//学生查自己的成绩
//用输入1作为判断其实很不合理,可以的话最好需要采用判断登录的账号为“xxx”根据账号再加上给对方设置的学号
//加入判断,为了方便可采用定义变量的方式,并加入for循环遍历
if (textBox1.Text == "1")
{
try
{
string connString = "Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-JDBDU3F)(PORT = 1521)) )(CONNECT_DATA =(SERVICE_NAME = xsgl) ));Persist Security Info=True;User ID=xsgl;Password=123456;";
OracleConnection conn = new OracleConnection(connString);
string str = "select snum,sname,score,slesson from score where snum=" + textBox1.Text;
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = str;
conn.Open();
OracleDataAdapter oraDA = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
oraDA.Fill(ds);
conn.Close();
DataTable dtbl = ds.Tables[0];
this.dataGridView1.DataSource = dtbl;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误");
}
}
else
{
MessageBox.Show("输入错误!");
}
最后就使用C#制作的系统录入,删除,修改,查询数据吧,如要验证是否连接上Oracle,则使用cmd命令,看是否能查询到,如果能,那么学生成绩管理系统就完成了。
作为一个新手,还有很多不懂,如有不对希望指正!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101187.html