asp.net 개발 sql server 를 Oacle 로 변환 하 는 방법 에 대한 상세 한 설명
얼마 전에 우리 회사 프로젝트 는 sql server 를 Oacle 로 옮 겨 야 했 기 때문에 인터넷 에 있 는 자료 가 비교적 적 다 는 것 을 알 게 되 었 습 니 다.그래서 여기 서 소감 을 공유 하고 문 제 를 기록 하 겠 습 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 보 겠 습 니 다.
제 가 연 구 를 좀 하고 다운 을 받았어요.
Oacle 11g 버 전 은 PL/SQL(클 라 이언 트)과 sql server 가 다른 것 은 Oacle 이 자신의 클 라 이언 트 가 없 으 면 제3자 소프트웨어 로 PL/SQL 을 실행 해 야 한 다 는 것 입 니 다.sqldeveloper 도 하나 이 고 PL/SQL 은 안정 적 이 라 고 생각 합 니 다.근 데 둘 다 설치 하면 서로 보완 할 수 있어 요.
Oacle 은 감청 없 는 오류 가 발생 하기 쉬 우 니 참고 하 시기 바 랍 니 다.
https://www.jb51.net/article/91184.htm
그리고 사용 하기
테이블 공간 만 들 기,사용자 만 들 기,인터넷 에서 다 찾 을 수 있어 요.
자,다 설치 되 었 습 니 다.다음은 sql server 에서 Oacle 로 전환 하 겠 습 니 다.
먼저,데이터 뱅 크 의 전환 입 니 다.저 는 여러 가지 방식 을 시 도 했 습 니 다.많 든 적 든 문제 가 있 습 니 다.두 개의 서로 다른 데이터 베이스 이기 때문에 마지막 으로 저 는 프로그램 전환 을 쓰기 로 결 정 했 습 니 다.
코드 붙 이기
링크 문자열
<add key="OracleConnectionString" value="Password=123;User ID=SA;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost )(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)))"/>
<add key="SqlServerConnectionString" value="server=localhost;database=Table;uid=sa;pwd=123"/>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OracleClient;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TransplantSQL
{
public partial class Form1 : Form
{
public static string OracleConnectionString = System.Configuration.ConfigurationSettings.AppSettings["OracleConnectionString"];
public static string SqlServerConnectionString = System.Configuration.ConfigurationSettings.AppSettings["SqlServerConnectionString"];
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
OracleConnection con = new OracleConnection(OracleConnectionString);
try
{
con.Open();
if (con.State == System.Data.ConnectionState.Open)
{
label5.Text = " ";
}
}
catch (OracleException se)
{
label5.Text = " ";
}
finally
{
con.Close();
}
}
private void button3_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(SqlServerConnectionString);
try
{
con.Open();
if (con.State == System.Data.ConnectionState.Open)
{
label4.Text = " ";
}
}
catch (SqlException se)
{
label4.Text = " ";
}
finally
{
con.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
DataTable tablenames = GetTableNames();
foreach (DataRow item in tablenames.Rows)
{
string tablename = item["Name"].ToString().ToUpper();
setdata(tablename);
}
}
else
{
setdata(textBox1.Text);
}
label2.Text = " ";
}
private static void setdata(string tablename)
{
//
int et = Convert.ToInt32(GetSingle("select count(*) from user_tables where table_name = '" + tablename + "'"));
if (et <= 0)
{
DataTable tableInfo = GetTableInfo(tablename);
string addtablesql = "CREATE TABLE {0}({1})";
string cs = string.Empty;
string biaoshi = string.Empty;
foreach (DataRow citem in tableInfo.Rows)
{
cs += citem[" "].ToString();
if (citem[" "].ToString() == "int" || citem[" "].ToString() == "bit" || citem[" "].ToString() == "decimal")
{
cs += " NUMBER(" + (Convert.ToInt32(citem[" "]) > 38 ? 38 : Convert.ToInt32(citem[" "])) + (Convert.ToInt32(citem[" "])>0?(","+Convert.ToInt32(citem[" "])):"") + ")";
}
else if (citem[" "].ToString() == "nvarchar" || citem[" "].ToString() == "float")
{
cs += " VARCHAR2(" + (Convert.ToInt32(citem[" "]) == -1 ? 4000 : Convert.ToInt32(citem[" "]) * 2) + ")";
}
else if (citem[" "].ToString() == "datetime")
{
cs += " DATE";
}
cs += citem[" "].ToString() == "1" ? " primary key " : "";
if (citem[" "].ToString() == "1")
{
biaoshi = citem[" "].ToString();
}
cs += citem[" "].ToString() != "" ? " default " + citem[" "].ToString() + " " : "";
cs += citem[" "].ToString() == "1" ? "," : " NOT NULL,";
}
cs = cs.Substring(0, cs.Length - 1);
string tempsql = string.Format(addtablesql, tablename, cs);
GetSingle(tempsql);
if (biaoshi != string.Empty)
{
#region
int xuliehao = 0;
try
{
xuliehao = Convert.ToInt32(GetSingle(string.Format(@"select Seq_{0}.nextval from sys.dual", tablename)));
}
catch { }
if (xuliehao <= 0)
{
#region min
int max = Convert.ToInt32(GetSingle(string.Format("select max({1}) from {0}", tablename, biaoshi),null));
#endregion
string sequence = string.Format(@"create sequence Seq_{0} start with {1} increment by 1 nomaxvalue minvalue 1 nocycle nocache", tablename, (max+1));//
GetSingle(sequence);
}
#endregion
#region
string chufaqisql = string.Format(@"CREATE OR REPLACE TRIGGER T_{0}
BEFORE INSERT ON {0} FOR EACH ROW WHEN (new.{1} is null)
begin
select Seq_{0}.nextval into:new.{1} from dual;
end;", tablename, biaoshi);//
GetSingle(chufaqisql);
#endregion
#region
//string weiyisql = string.Format(@"create unique index U_{0} on {0} ({1})", tablename, biaoshi);
//GetSingle(weiyisql);
#endregion
}
//int count = Convert.ToInt32(GetSingle("SELECT count(1) FROM " + tablename));
//if (count < 10000)
//{
DataSet ds = Query("SELECT * FROM " + tablename);
DataTable dt = ds.Tables[0];
string columnsNames = string.Empty;
string values = string.Empty;
for (int i = 0; i < dt.Columns.Count; i++)
{
columnsNames += dt.Columns[i].ColumnName + ",";
}
columnsNames = columnsNames.Substring(0, columnsNames.Length - 1);
foreach (DataRow dr in dt.Rows)
{
values = string.Empty;
for (int i = 0; i < dt.Columns.Count; i++)
{
if (dr[i] != DBNull.Value)
{
if (dr[i].ToString() != "")
{
if (dt.Columns[i].DataType == Type.GetType("System.Double")
|| dt.Columns[i].DataType == Type.GetType("System.Decimal")
|| dt.Columns[i].DataType == Type.GetType("System.Int32"))
{
values += dr[i] + ",";
}
else if (dt.Columns[i].DataType == Type.GetType("System.String"))
{
values += "'" + dr[i].ToString().Replace('\'', '‘') + "',";
}
else if (dt.Columns[i].DataType == Type.GetType("System.DateTime"))
{
values += "to_date('" + dr[i] + "','YYYY/MM/DD HH24:MI:SS'),";
}
else if (dt.Columns[i].DataType == Type.GetType("System.Boolean"))
{
if (dr[i].ToString() == "False")
{
values += "0,";
}
else { values += "1,"; }
}
}
else
{
values += "chr(32),";
}
}
else
{
values += "NULL,";
}
}
values = values.Substring(0, values.Length - 1);
string osql = "Insert into " + tablename + "(" + columnsNames + ") values(" + values + ")";
GetSingle(osql);
}
//}
}
}
private static DataTable GetTableNames()
{
string sql = string.Format(@"SELECT Name FROM SysObjects Where XType='U' ORDER BY Name");
DataSet ds = Query(sql);
return ds.Tables[0];
}
private static DataTable GetTableInfo(string tableName)
{
string sql = string.Format(@"SELECT (case when a.colorder=1 then d.name else null end) ,
a.colorder ,a.name ,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '1'else '' end) ,
(case when (SELECT count(*) FROM sysobjects
WHERE (name in (SELECT name FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))
AND (xtype = 'PK'))>0 then '1' else '' end) ,b.name ,a.length ,
COLUMNPROPERTY(a.id,a.name,'PRECISION') as ,
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as ,(case when a.isnullable=1 then '1'else '' end) ,
REPLACE(REPLACE(isnull(e.text,''),'(',''),')','') ,isnull(g.[value], ' ') AS [ ]
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.class and f.minor_id=0
where b.name is not null
And d.name='{0}'
order by a.id,a.colorder", tableName);
DataSet ds = Query(sql);
return ds.Tables[0];
}
public static DataSet Query(string SQLString)
{
using (SqlConnection connection = new SqlConnection(SqlServerConnectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
command.Fill(ds, "ds");
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
public static object GetSingle(string SQLString)
{
using (OracleConnection connection = new OracleConnection(OracleConnectionString))
{
using (OracleCommand cmd = new OracleCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, null);
object obj = cmd.ExecuteScalar();
cmd.Parameters.Clear();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (OracleException e)
{
throw e;
}
}
}
}
private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, OracleParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
foreach (OracleParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
{
using (SqlConnection connection = new SqlConnection(SqlServerConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
object obj = cmd.ExecuteScalar();
cmd.Parameters.Clear();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (System.Data.SqlClient.SqlException e)
{
throw e;
}
}
}
}
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
}
}
이 코드 는 제 데이터베이스 변환 에 적응 되 어 있 습 니 다.필요 하 시 면 수정 하 셔 도 됩 니 다.그 중에서 Oacle 은 스스로 증가 하 는 것 이 아니 라 서열 의 다른 서열 은 트리거 로 문 제 를 일 으 킬 수 있 습 니 다.
그리고 제 원래 프로그램 문자열 링크 를 Oacle 링크 로 바 꿔 서 붙 였 습 니 다.
우선
System.Data.SqlClient;
인용 변경System.Data.OracleClient;
그리고 신문 을 잘못 본 곳 에서 다 고치 면 돼 요.Sql 에서 Oracle 로 바 꾸 면 돼 요.그리고 제 가 잘못 보고 하지 않 았 는데 sqlserver 와 Oacle 이 다른 곳 을 붙 였 어 요.
이전 몇 개의 데 이 터 를 조회 합 니까?
select * from (SELECT * FROM Table) where rownum<100
다른 형식 은 문자열 형식 으로 바 뀌 었 습 니 다.select to_char(기타 형식,문자열 형식)예:
select to_char(sysdate,'yyyy-mm-dd') from dual
문자열 캡 처(절 취 된 문자열,시작 위치,길이)
select substr('111222',3,2) from dual
문자열 형식 이 시간 형식 으로 바 뀌 었 습 니 다.
select to_date('2017-08-03','yyyy-mm-dd') from dual
sql 매개 변수 화 자리 표시 자,@사용 할 수 없습니다:
SELECT * FROM Table where ID=:ID
시스템 시간getdate()
로 변경sysdate
현재 자동 증가 열 ID 가 져 오기
select Seq_Table.currval from dual
Seq_Table 은 자동 으로 열 을 늘 리 는 이름 입 니 다.표 마다 다 르 기 때문에 현 재 를 찾 아야 합 니 다.표 설정 의 자동 성장 열 에 대응 하 는 이름
다 고 친 다음 에 프로그램 이 잘못 보고 되 지 않 으 면 운행 합 니 다.
32,64 비트 가 나 옵 니 다.어떤 문제 가 나 옵 니까?
그런데 이게 저 한 테 는 안 돼 요.그리고 이게 바 뀌 면 원래 있 던 프로젝트 에 많은 문제 가 생 길 것 같 아 요.
그래서 제 가 연 구 를 오래 했 는데 몇 가지 결과 가 나 왔 습 니 다.
우선 콘 솔 이나 창 프로그램 이 라면 프로젝트 의 첫 번 째 32 자 리 를 체크 하면 됩 니 다.
asp.net 페이지 프로그램 이 라면 쉽 지 않 을 겁 니 다.
저 는 64 비트 시스템 이 고 Oacle 과 클 라 이언 트 를 설치 합 니 다.
그리고 인터넷 에 인 스 턴 트 클 라 이언 트 32 개 설치 하 겠 다 고 했 어 요.
그리고 다음 에 프로그램 을 설치 하면 되 는데,
하지만 저 는 서버 에서 같은 방법 으로 다시 안 되 겠 습 니 다.많은 자 료 를 찾 아 아이 리 스 를 다시 설 치 했 습 니 다.(사실은 framework 를 다시 등록 해 야 합 니 다)
32 비트 버 전 을 설치 하 는 것 이 Oacle 버 전과 같 으 면 좋 습 니 다.
그때 저 는 여러 버 전 디 버 깅 을 했 습 니 다.가끔 은 Instant Client Setup 을 설치 할 때 한 점 에 걸 려 서 움 직 이지 않 습 니 다.몇 번 더 시도 해 보 세 요.안 되면 다시 찾 아 보 세 요!
설치 후 제어 판 에서 찾 을 수 있 습 니 다.
또한 백업 복원 명령 을 붙 여 CMD 로 실행 수정 매개 변 수 를 엽 니 다.
Exp sa/123@ORCL file=C:\OracleBack\back_%date:~0,4%%date:~5,2%%date:~8,2%.dmp owner=sa
IMP sa/123 BUFFER=64000 FILE=C:\OracleBack\back_20170821.dmp FROMUSER=SA TOUSER=SA
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.