Oracle
第一范式:就是数据库每个单元格,拆分为最小单位,不能再拆分了
表(table)=实体(entity)=关系(relation)
行(row)=记录(record)
行(column)=属性(attribute)
ORACLE服务器=ORACLE系统=ORACLE数据库管理系统
oracle
这里要注意的是:连接到服务端上的Oracle数据库时,需要把配置文件修改了,使其能够进行局域网或者远程的访问,还要把端口开放。
在Oracle数据库安装路径,当然每台安装oracle数据库的地址都是不同的(例如:C:\Oracle11g\product\11.2.0\dbhome_1\network\admin\listener.ora tnsnames.ora)中找到文件listener.ora和tnsnames.ora文件,把两个文件中HOST = localhost配置改成HOST=192.186.11.1(服务器IP地址)重新启动服务。
连接oracle
1.在工具-nuget包管理器-下载安装Oracle.ManagedDataAccess到解决资源项目
命名空间:using Oracle.ManagedDataAccess.Client;
连接语句:
//设置数据库连接语句 用户、密码、ora实例名
string connString = "User ID=admin;Password=admin123;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORACLEDATA)))";
OracleConnection conn = new OracleConnection(connString);
try
{
conn.Open();
Console.WriteLine("连接成功!" + conn.State.ToString());
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("连接失败!" + ex.Message.ToString());
Console.ReadLine();
}
finally
{
conn.Close();
Console.ReadLine();
}
2.改善上面的代码语句:
编写一个OracleHelper类
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace winformTestOracleconnect06
{
internal class OracleHelper
{
static string connString = "User ID=admin;Password=admin123;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 10.127.100.189)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORACLEDATA)))";
public static int ExecuteNonQuery(string sql, params OracleParameter[] parameters)
{
using (OracleConnection conn = new OracleConnection(connString))
{
conn.Open();
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
int i = cmd.ExecuteNonQuery();
conn.Close();
return i;
}
}
}
public static DataTable ExecuteDataTable(string sql, params OracleParameter[] parameters)
{
using (OracleConnection conn = new OracleConnection(connString))
{
conn.Open();
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
OracleDataAdapter adapter = new OracleDataAdapter(cmd);
DataTable datatable = new DataTable();
adapter.Fill(datatable);
conn.Close();
return datatable;
}
}
}
}
}
3:在类中使用
如查询:
string sSql;
DataTable dt = new DataTable();
// sql 语句
sSql = " select * from Table1";
// sql 赋值 无参数传入 sql
OracleParameter[] paramATIO = new OracleParameter[] { };
// sql 语句
// sSql = " select * from students where name = :name and age = :age";
// string name = "张三";
// int age = 16;
// 有参数传入 sql
// OracleParameter[] paramATIO = new OracleParameter[] {
// new OracleParameter(":name",name ),
// new OracleParameter(":age",age + "")
// };
// 执行sql
dt = OracleHelper.ExecuteDataTable(sSql, paramATIO);
if (dt.Rows.Count > 0)
{
dataGridView1.DataSource = dt;
/*Console.WriteLine("该 sql 执行结果共计" + dt.Rows.Count + " 行");
Console.WriteLine("数据" + dt.Rows[0][1]);
Console.ReadKey();*/
//0
#region 输出
/* for (var i = 0; i < dt.Rows.Count; i++)
{
var row = dt.Rows[i];
var str = "";
//0,1
for (var j = 0; j < row.ItemArray.Length; j++)
{
str += row[j] + " ";
}
Console.WriteLine("row:" + i + " " + str);
Console.ReadKey();
}*/
#endregion
}
非查询语句:如添加
if (textBox1.Text.Trim() != string.Empty && textBox2.Text.Trim() != string.Empty)
{
string sSql = "INSERT INTO TABLE1 (\"user\",\"password\")VALUES('" + textBox1.Text + "','" + textBox2.Text + "')";
int i = OracleHelper.ExecuteNonQuery(sSql);
if (i > 0)
{
MessageBox.Show("添加成功", "添加", MessageBoxButtons.OK, MessageBoxIcon.Question);
}
else
{
MessageBox.Show("添加失败", "添加", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("添加失败", "添加", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
this.Close();
}
using语句的使用
using (SqlConnection con = new SqlConnection(strCon)) { DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter("SELECT No AS 员工编号, Name AS 员工姓名," + " Salary AS 基本工资, Evaluation AS 工作评价 FROM tb_Personnel ORDER by No", con); da.Fill(dt); this.dgvStaffInfo.DataSource = dt.DefaultView; }
它的作用是当使用SqlConnection类的实例时无论什么原因,离开这个代码段就自动调用SqlConnection类的Dispose。使用try……catch也能达到同样的目的,但是using更为方便一点。
也可以这样理解:using(SqlConnection con = new SqlConnection(strCon))这句代码的意思是控制对于数据库的关闭和释放
如果是其他的内容也是同理。
using()这一句执行完毕后,通过数据适配器SqlDataAdapter da = new SqlDataAdapter(“SELECT No AS 员工编号, Name AS 员工姓名,” +" Salary AS 基本工资, Evaluation AS 工作评价 FROM tb_Personnel ORDER by No", con)中的con对数据库进行连接上,
在接下来的代码段中可直接对数据库中的数据进行相关的操作。
在这段代码段中,如果某一句发生异常,using的作用就会使程序的执行直接跳过这段,并且关闭using()括号中的实例。
在本代码中,如果using下的代码段产生错误,直接结束整段using下的代码,并且关闭数据库并释放资源。类似于try……catch,但是更为高级。因为在try……catch中如果产生某句代码产生异常,会在该句产生一个断点,中断于此并抛出异常。而且如果要释放资源,需要在catch中声明和定义。但是using会自动的释放掉这些占用的资源。
DOM进入Oracle数据库
我们可以使用“sqlplus”命令进入Oracle数据库