在程式存取資料庫
你要怎麼存取sql server,用sql manager
要怎麼存取orcle ,用oracle manager
要怎麼存取iq,用interactive
那如果我程式,想要存取sqlserver,就要裝sqlserver提供的dll,用sqlserver的function
程式要存取orcle,就要裝oracle dll,用oracle function
但他們提供的function namespace可能都不同,如果公司由sqlserver換到oracle,程式資料存取層就要改.
所以....微軟在1992年發表了ODBC,提供interface,大家按這樣來開發驅動.大家只要裝好driver,在ODBC上做好設定.
就能存取了.如果日後不管是SQLServer還是Oracle或是任何資料來源.
只要在ODBC上更換設定,程式不用再做任何異動了.
以sqlserver & oracle為例
用之前語法不同,用了ODBC之後,只有連線字串不同,其它都一樣
//sqlserver
using(SqlConnection openCon=new SqlConnection("your_connection_String"))
{
string saveStaff = "INSERT into tbl_staff (staffName,userID,idDepartment) VALUES (@staffName,@userID,@idDepartment)";
using(SqlCommand querySaveStaff = new SqlCommand(saveStaff))
{
querySaveStaff.Connection=openCon;
querySaveStaff.Parameters.Add("@staffName",SqlDbType.VarChar,30).Value=name;
.....
openCon.Open();
}
}
//oracle
public void Insert(Student student)
{
string insertSqlStr = "insert into Student(Student_Id, Student_Name, Student_Age, Student_Sex)values(:Student_Id,:Student_Name,:Student_Age,:Student_Sex)";
try
{
using(OracleConnection openCon=new OracleConnection("your_connection_String"))
{
OracleCommand cmd = new OracleCommand(insertSqlStr, conn);
cmd.Parameters.AddWithValue("Student_Id", student.student_Id);
cmd.Parameters.AddWithValue("Student_Name", student.student_Name);
cmd.Parameters.AddWithValue("Student_Age", student.student_Age);
cmd.Parameters.AddWithValue("Student_Sex", student.student_Sex);
cmd.ExecuteNonQuery();
Console.WriteLine(string.Format("添加{0}成功!", student.student_Name));
}
}
catch(Exception ex)
{
Console.WriteLine(string.Format("添加{0}失敗!", student.student_Name));
}
}
//odbc--
using System.Data.Odbc; //used for the ODBC stuff
using System.Data; // Used for public static datatable
string sql="";
OdbcConnection cnn= new OdbcConnection(MyConString);
cnn.Open();
using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
cmd.ExecuteNonQuery();
CloseConnection(cnn);
ref odbc+sqlserver https://docs.oracle.com/cd/E17952_01/connector-odbc-en/connector-odbc-examples-programming-net-csharp.html
ref odbc+oracle https://stackoverflow.com/questions/19660773/insert-records-in-oracle-database-using-c-sharp-odbc
ODBC設定
DSN分為三種:
用戶DSN:只有該登入者能用
系統DSN:所有登入者都能用 (我們通常都是用這個)
檔案DSN:連線資訊儲存檔案文件裡
1.選驅動程式 *不同驅動,後續設定方式會有稍許差異
2.Data source name : 任選,這個name將會提供給USER做連線使用
Network/TCP/IP : Host=127.0.0.1:133
Advanced/Character set : iso_1 //如果有亂碼,可以試著填填看
可以用 Regedit
找到
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI]
將相關資料匯出成.reg
要匯入的話,直接點 .reg 檔案兩下就行了
總結
工作上的運用
1.ETL工具,設ODBC,就不用管它是什麼來源,選ODBC就好了.
2.程式上存取sybase
ODBC優點
1.方便管理,IP異動/PWD異動什麼的,都很方便修改
2.如果有多個系統要使用,它可以做connection pool共用.
3.不管是存取任何資料來源,都可使用相同的function存取
缺點
如果是Server Client,那就要在每台client上設定odbc (所以..server client比較不適用這個方法)