iT邦幫忙

0

什麼是ODBC?工作上的運用?優缺點?匯出ODBC!

在程式存取資料庫
你要怎麼存取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 //如果有亂碼,可以試著填填看

匯出ODBC

可以用 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比較不適用這個方法)


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言