最近工作上有一个小小的需求,转移不同oracle数据库中的数据。记录一下:
两个数据库都是通过远程访问的方式进行数据的读取和写入。数据中转我采用的是使用txt文件。
首先需要做的是:连接ORACLE数据库,这个比较简单。
其次需要做的是:读取ORACLE_A数据库中的数据,保存到txt文本中,贴出代码:
里面就两个点:txt文本的创建和写入。
string data = "select * from GSM设备表";
DataSet dsCount = myOracleJz.GetDataSetFromSql(data);
FileStream fs = new FileStream(@"C:\Users\Administrator\Desktop\GSM设备表.txt", FileMode.OpenOrCreate);
fs.Flush();
fs.Close();
for (int i = 0; i < dsCount.Tables[0].Rows.Count; i++)
{
StreamWriter sw = File.AppendText(@"C:\Users\Administrator\Desktop\GSM设备表.txt"); //保存到指定路径
//sw.Write("\r\n");
for (int j = 0; j < dsCount.Tables[0].Columns.Count; j++)
{
if (dsCount.Tables[0].Rows[i][j].ToString() == "")
{
sw.Write(dsCount.Tables[0].Rows[i][j].ToString() + "null" + "\r\n");
}
else
{
sw.Write(dsCount.Tables[0].Rows[i][j].ToString() + "\r\n");
}
}
sw.Flush();
sw.Close();
这个程序值得我记录的关键点在于下面的东西:数据库的插入。
在创建ORACLE数据库的时候,每一列都是有数据结构的,我们在插入的时候,插入的数据格式需要和表中的数据结构一致。此处我涉及到的数据结构一共有四种:
CHAR
NUM
DATE
FLOAT
每种数据结构的要求都不同,
在插入CHAR型的时候,需要加上单引号;
NUM型不需要加单引号,
FLOAT也不需要添加单引号。
DATE型,比较特殊,需要进行一下数据格式的转换如下:to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss')
string sql = "insert into 通知表(姓名,编号,说明,手机号码,创建时间) values( '" + sArray[j] + "','" + sArray[j + 1] + "','" + sArray[j + 2] + "','" + sArray[j + 3] + "'," + "to_date('"+ data + "','yyyy-mm-dd hh24:mi:ss')" + ")";
在程序调试过程中,遇到了以下报错:
缺失括号(sql语句引号使用错误)
违反唯一约束条件(主键插入的内容发生重复)
文字与格式字符串不匹配(主要是因为char型数据没有添加引号)
违反完整约束条件--未找到父项关键字(插入字符缺失,一般是列名不对)
期间还遇到了无监听程序的错误,不过通过重新打开项目解决掉了。
在进行数据插入时,如果想空出某一列的话:加两个单引号即可。