最近通过网络学习了该怎么用C#连接Oracle数据库制作一个管理软件,说实话,网络上连接Oracle的教程非常少,一般都是使用MYSQL,但是我通过学习对比发现,不管是连接Oracle还是连接MYSQL其实代码都大同小异。
废话不多说,你需要使用到的Oracle11g以及Visual Studio 2017,主要是我使用这两个版本的软件,其他版本可能操作上会和我有所不同,此外,你还需要从网络上下载一个插件:Oracle.ManagedDataAccess.dll,有这个插件才可以调用引用,连接上Oracle
要连接上Oracle,首先要在Oracle上创建一个
用户,并为你创建的用户设定监听,如我创建了一个用户:xsgl,密码:123456,则使用cmd命令连接Oracle,先创建一个表空间,代码如下:
create tablespace xsgl_tbs
datafile ‘D:\xsgl\ xsgl.dbf’ size 10m
autoextend on
next 1m
maxsize unlimited
并使用代码:
create user xsgl
identified by 123456
default tablespace xsgl_tbs
在刚刚创建的表空间里创建用户xsgl
然后使用sqlplus xsgl/123456登录刚刚创建的用户
接着使用代码:
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方面的代码就简单弄好了。
打开Visual studio,点击文件-新建-项目,找到visual C#下的windows桌面,选中windows窗体应用创建项目
之后就可以使用左边工具箱“画”出来你想要的界面
这里你需要用的工具箱里的大致有Label,Button,TextBox,Radiobutton以及DataGridView(如没有在工具箱找到点开工具箱搜索)
以下我创建了一个简单的登录界面,里面有三个角色:教师,学生以及管理员,教师可以查询所有学生的成绩,学生只能查询自己的成绩,管理员可以对数据库里表的数据进行增删改查。
在“画”完登录界面后,有一个必须得注意,那就是你插入的textbox,radiobutton指针名字,因为你之后要在输入框里输入账号和密码登录,需要调用它,就要知道textbox以及radiobutton的名字,可以在右下角指针的属性修改,也可以默认名字,不过这就需要你们记住名字了。
接着双击对登录Button按钮进行写入代码实现输入用户名和密码以及选择角色的时候跳转到第二个界面,跳转界面需要你添加第二个窗体,找到右边的解决方案资源管理器里你创建的项目名右击,选中添加-新建项-windows窗体,这样第二个窗体就创建成功了,如果要跳转别的界面也是按照这个方法。
接着对登录的button按钮双击写入代码实现跳转,以下是登录按钮代码:
if (user.Text == “333” && password.Text == “333”&&manager.Checked)//管理员
{
var form = new Form2();
form.Show();//这里显示另一个窗口
this.Hide();//这里隐藏当前窗口
}
else if (user.Text == "111" && password.Text == "111" && teacher.Checked)//教师
{
var form = new Form3();
form.Show();//这里显示另一个窗口
this.Hide();//这里隐藏当前窗口
}
else if (user.Text == "222" && password.Text == "222" && student.Checked)//学生
{
var form = new Form4();
form.Show();//这里显示另一个窗口
this.Hide();//这里隐藏当前窗口
}
else
{
System.Windows.Forms.MessageBox.Show("输入错误!");
}
如此用户名:111 密码:111 角色:教师则跳转Form3窗体
用户名:222 密码:222 角色:学生跳转Form4窗体
用户名:333 密码:333 角色:管理员跳转Form2窗体
其他情况弹出消息:输入错误!
如有需要自行更改用户名以及密码。
主要的操作都是通过管理员角色实现增删改查的,下面开始对它进行编程。
当然在这之前依旧是“画”出来界面跳到相应的功能界面:
这个界面用来跳转,我只把第一个按钮代码例子写出来,其他代码是一样的,只是跳转的不同的界面:
private void button5_Click(object sender, EventArgs e)
{
var form = new Form6();//跳转界面Form6
form.Show();
this.Hide();
}
在实现功能前,有一个最最重要的步骤,那就是连接上Oracle,在这一步上我以及失败了很多次了,然后终于被我找个该怎么稳定的连接上数据库。
第一步:你需要使用cmd命令登录oracle里你创建的用户。
第二步:将下载的Oracle.ManagedDataAccess.dll插件添加到解决方案资源管理器下的引用,这步也比较重要,必须是引用的里面,而不能是外面
第三步:找到你安装Oracle里的根目录,打开\product\11.2.0\dbhome_1\NETWORK\ADMIN目录下的tnsnames.ora,里面有配置连接Oracle的详细信息,如:
这个是我电脑oracle的配置数据,找到后不要关掉,然后接下来实现增删改查。
这个是我的录入成绩界面,“画”好界面后双击录入按钮编写代码,在编写之前先说说连接数据库,连接数据库代码是: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;”;
里面的数据对应刚刚的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;”;
OracleConnection conn = new OracleConnection(connString);
conn.Open();
//这几条语句根据自己创建的表修改
String sid = this.textBox1.Text;//学号
String sname = this.textBox2.Text;//姓名
String score = this.textBox3.Text;//分数
String lesson = this.textBox4.Text;//课程
var commandText = “insert into score (snum,sname,score,slesson) values(’”+sid+"’,’"+sname+"’,’"+score+"’,’"+lesson+ “’)”;
using (OracleConnection connection = new OracleConnection(connString))
{
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);
string MyDelete = "Delete from students where snum=" + textBox1.Text;
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;
string update = “Update score set sname=’” + sname + “’,score=’” + score + “’,lesson=’” + lesson + “'where snum=” + textBox1.Text;
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指针,在输入框输入学号,会在下面显示录入的信息,它的代码和教师查询成绩的代码相同,以下是代码:
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, "错误");
}
到这里学生成绩管理系统基本弄好了,那么最后一个就是学生查询成绩,他只能查询自己的成绩,我这里用了一个比较取巧的方法,用if语句判断他只能查询一号,否则弹出输入错误的消息。
代码如下:
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命令,看是否能查询到,如果能,那么学生成绩管理系统就完成了。
作为一个新手,还有很多不懂,如有不对希望指正!