实习期间接手一个开发WebService的任务,开发语言是C#,数据库是Oracle,当时并没有做过C#连接Oracle,网上关于C#连接Oracle的说法莫衷一是,
经过自己多次尝试找到可以正常访问Oracle数据库的方法。我连接Oracle采用的是动态链接库Oracle.ManagedDataAccess引用文件(这里说明一下
采用System.Data.OracleClient可能会报错"尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle客户端组件的
情况下运行,将出现此问题。")由于我没有安装Oracle客户端,所以采用PL/SQL工具查看数据库。需要在tnsnames.ora配置数据库,格式为:
数据库名=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 数据库远程主机地址 )(PORT = 端口号))
(CONNECT_DATA =
(SERVER = 服务器)
(SERVICE_NAME = 服务名)
)
)
再附上C#连接Oracle数据库代码:
using System.Data;
using Oracle.ManagedDataAccess.Client;
public String OracleConnection()
{
try
{
string connString = "data source=此处放tnsnames.ora配置的"数据库名="后面的内容;User ID=数据库用户名;password=数据库密码";
OracleConnection conn = new OracleConnection(connString);
conn.Open();
String sql = "select * from student";
DataTable dataTable = getDataTable(sql, conn);
String[] array = arrayConversion(dataTable);
return array[0];
}
catch (Exception e)
{
return e.ToString();
}
}
private DataTable getDataTable(string sqlSearch, OracleConnection conn)
{
OracleDataAdapter dataAdapter = new OracleDataAdapter(sqlSearch, conn);
DataTable dataTable = new DataTable();
dataAdapter.Fill(dataTable);
dataTable.Dispose();
return dataTable;
}
private string[] arrayConversion(DataTable dataTable)
{
int length = dataTable.Rows.Count;
string[] strArray = new string[length];
for (int i = 0; i < length; i++)
{
strArray[i] = dataTable.Rows[i][0].ToString();
}
return strArray;
}