C# 連結資料庫及Excel方法

連結資料庫的語法挺好理解的

一、必須要有資料庫檔案
二、資料庫檔案要有資料
(第1跟第2點,因為是老師給我們的檔案,不曉得會不會有版權問題,所以不在此提供)
三、建起資料庫,並且可以連線


從第三點開始:
由於會使用到SQL Server,所以先創建SQLAdmin及SQLuser這2個帳號
進入SQL Server輸入指令:





USE [master]
GO
EXEC xp_instance_regwrite
  N'HKEY_LOCAL_MACHINE',
  N'Software\Microsoft\MSSQLServer\MSSQLServer',
  N'LoginMode', REG_DWORD, 2
GO

EXEC sp_attach_db 中文北風,'C:\Data\SQL\中文北風.mdf','C:\Data\SQL\中文北風_log.ldf'
GO
--將「中文北風」的mdf及ldf檔案附加
EXEC sp_attach_db 練練,'C:\Data\SQL\練練.mdf','C:\Data\SQL\練練_log.ldf'
GO
--將「練練」的mdf及ldf檔案附加

CREATE LOGIN SQLAdmin WITH PASSWORD='1234'
GO
EXEC sp_addsrvrolemember 'SQLAdmin','sysadmin'
GO

CREATE LOGIN SQLUser WITH PASSWORD='1234'
GO

USE 中文北風
CREATE USER SQLUser
GO
EXEC sp_addrolemember 'db_datareader','SQLUser'
GO

USE 練練
CREATE USER SQLUser
GO
EXEC sp_addrolemember 'db_datareader','SQLUser'
GO

完成後,前置作業就算ok了,進SQLServer測試一下連線:


測試若連不上,可能是SQLServer Management Studio沒有用管理者權限開啟
在開始→所有程式→Microsoft SQL Server 2012→ SQL Server Management Studio按右鍵
選擇相容性→特殊權限等級裡打勾應該就可以了


接著要在程式中進行調用,用老師的比喻就是:
資料庫是座保護良好的城池,裡面有很多很多的資料
要進去撈東西一定要有中間的構連,而這橋梁以下會說明3種
不多做論述,只說說大概差別:

一、OleDb MicroSoft因應物件化所製定的通路橋梁
using System.Data.OleDb;
二、Odbc   MicroSoft主導的標準開啟橋梁方法,java也可用
using System.Data.Odbc;
三、SqlClient MicroSoft針對SQL Server最佳化的通路橋梁
using System.Data.SqlClient;

以下的程式碼會各別展示這3種,除了構連SQL Server外
還會連接Access及Excel這2種檔案。

1.OleDb連結Access


private void button1_Click(object sender, EventArgs e)
{
    OleDbConnection cnn = new OleDbConnection();
    cnn.ConnectionString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\資料庫檔\北風A.mdb";
    //這就像通關密碼,正確才給過
    try
    {
        cnn.Open();
        MessageBox.Show("連線Access成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("連線Access出問題!");
    }
    finally
    {
        cnn.Close();
    }

}

2.OleDb連結Excel


private void button2_Click(object sender, EventArgs e)
{   
    //office2003前的Excel版本用這個連接
    String cnnS = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\資料庫檔\資料.xls;";
    cnnS += "Extended Properties=\"EXCEL 8.0;HDR=YES\"";

    //office2007後的Excel版本用這個連接,若連接不上,請找AccessDatabaseEngine去下載引擎
    //String cnnS = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\資料庫檔\資料(新).xlsx;";
    //cnnS += "Extended Properties=\"EXCEL 12.0;HDR=YES\"";

    OleDbConnection cnn = new OleDbConnection(cnnS);            

    try
    {
        cnn.Open();
        MessageBox.Show("連線Excel成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("連線Excel出問題!");
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        cnn.Close();
    }
}

3.Odbc連結Access:


private void button3_Click(object sender, EventArgs e)
{
    OdbcConnection cnn = new OdbcConnection();

    cnn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};" +
                            @"DBQ=C:\資料庫檔\北風A.mdb;" +
                            "UID=;" +
                            "PWD=;";
    try
    {
        cnn.Open();
        MessageBox.Show("連線Access成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("連線Access出問題!");
    }
    finally
    {
        cnn.Close();
    }
}

4.Odbc連結Access並設定DSN:


private void button4_Click(object sender, EventArgs e)
{
    OdbcConnection cnn = new OdbcConnection();
    //用DSN連線時,請務必記得在控制台→系統管理工具→ODBC資料來源中設定
    //若設定好仍連不上,有可能要找AccessDatabaseEngine去下載引擎
    cnn.ConnectionString = "DSN=kissMyAss;" +
                            "UID=;" +
                            "PWD=;";
    try
    {
        cnn.Open();
        MessageBox.Show("連線Access成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("連線Access出問題!");
    }
    finally
    {
        cnn.Close();
    }
}

5.SQLServr專用的SqlClient:


private void button5_Click(object sender, EventArgs e)
{
    SqlConnection sqlCnn = new SqlConnection();
    //windows驗證,只能在windows的作業系統下使用
    //sqlCnn.ConnectionString = "Server = localhost;Database =中文北風;Integrated Security=true;";
    //使用者帳號密碼驗證
    sqlCnn.ConnectionString = "Server = localhost;Database =中文北風;UID =SQLAdmin;PWD=1234";
    try
    {
        sqlCnn.Open();
        MessageBox.Show("連線SQLServer成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("連線SQLServer出問題!");
    }
    finally
    {
        sqlCnn.Close();
    }
}

6.SqlClient獨特的SqlConnectionStringBuilder:


private void button6_Click(object sender, EventArgs e)
{
    SqlConnection sqlCnn = new SqlConnection();
    //透過SqlConnectionStringBuilder方便連接!
    //其他oledb、odbc都有其自有的StringBuilder,但方便性沒SQL這麼好
    SqlConnectionStringBuilder sqlsb =new SqlConnectionStringBuilder();
    sqlsb.DataSource = "localhost";
    sqlsb.InitialCatalog = "中文北風";
    sqlsb.IntegratedSecurity = false;
    sqlsb.UserID = textBox1.Text;
    sqlsb.Password = textBox2.Text;
            
            
    sqlCnn.ConnectionString= sqlsb.ConnectionString;
    try
    {
        sqlCnn.Open();
        MessageBox.Show("連線SQLServer成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show("連線SQLServer出問題!");
    }
    finally
    {
        sqlCnn.Close();
    }
}

留言

熱門文章