2012-08-17 97 views
2

我開發了一個應用程序,其中有一個滑塊,顯示來自 SQL數據庫的一些數據。我正在使用Visual Studio 2010和Microsoft SQL Server 2008.如何在沒有安裝SQL Server的計算機上運行帶有SQL數據庫的應用程序

事實上,當我將它部署到我的個人計算機上時,我的應用程序沒有遇到任何問題。 當我在另一臺機器上嘗試它時出現問題,問題是應用程序無法連接到SQL數據庫。我試圖找出問題的原因,所以我在兩臺計算機上部署後嘗試了它,其中一臺安裝了SQL服務器,另一臺沒有SQL Server。 該應用程序在安裝了SQL Server的計算機上工作完美,並且無法連接到另一臺計算機上的數據庫。

這是連接字符串我在我的應用程序中使用>>

的connectionString =「數據 源= \ SQLEXPRESS; AttachDbFilename = | DataDirectory目錄| \ KBank.mdf;集成 安全= TRUE;用戶實例=真「

所以如果有一種方式可以使我運行應用程序,而不需要機器安裝SQL Server,我將不勝感激。謝謝

+1

您正在尋找一個嵌入式數據庫。看看SqlCE和SQLite。 – 2012-08-17 12:50:51

+1

您是否需要在本地網絡上的用戶之間共享單個數據庫,或者您的應用程序的每個用戶都有自己的數據庫? – Steve 2012-08-17 12:54:29

+0

@Steve它是用戶之間共享的相同數據庫。 它不會被改變。 – Hassanation 2012-08-17 13:51:38

回答

3

您需要更改連接字符串以指定安裝數據庫的計算機。像下面這樣:

的connectionString = 「數據源=機\ SQLEXPRESS; AttachDbFilename = | DataDirectory目錄| \ KBank.mdf;集成安全性=真;用戶實例=真」

請注意:另一臺機器上的數據庫需要正確配置,以便可以從其他機器訪問。

+0

應用程序將公開,我的意思是它不是爲本地網絡知道客戶端機器的名稱,有沒有什麼辦法讓機器使用連接字符串附加用戶的名稱? 和你喜歡什麼,使用SQLite或按照你的建議修改連接字符串? – Hassanation 2012-08-17 13:36:13

+1

這完全取決於每個安裝是否需要自己的數據庫,或者所有安裝需要共享相同的數據庫。 – 2012-08-17 13:43:17

+0

這是所有應用程序用戶的相同數據庫。 – Hassanation 2012-08-17 13:45:59

1

您的連接字符串正在使用本地主機,它通過連接字符串中的.表示。如果機器沒有安裝SQL Server,這將不起作用,因此您需要將連接字符串更改爲遠程機器(具有SQL Server安裝的機器,即您的個人計算機)。

+0

所以我該怎麼做? – Hassanation 2012-08-17 13:39:38

+0

@Hassan - 您需要將連接字符串更改爲使用SQL Server安裝的計算機的IP地址:connectionString =「Data Source = 0.0.0.1 \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ KBank.mdf; Integrated Security = True; User Instance = True「 – 2012-08-17 14:34:29

+0

其中,0.0.0.1是SQL Server所在機器的IP地址。 – 2012-08-17 14:34:51

1

如果你不想安裝SQL Server Express,你可以通過sql server compact(http://en.wikipedia.org/wiki/SQL_Server_Compact)去找一個嵌入式SQL服務器,或者也可以使用一個實際的網絡數據庫可用。

+0

我已經嘗試過SQL Server Compact 3.5並且發生了同樣的問題。 應用程序要求我在用戶機器上安裝sql server compact .. – Hassanation 2012-08-26 13:01:04

+0

我的連接字符串是Data Source = | DataDirectory | \ KBank.sdf;加密數據庫= True;文件模式=共享讀取; Persist Security Info = False – Hassanation 2012-08-26 13:02:20

+0

應用程序適用於我的機器,但錯誤發生在用戶機器>>謝謝 – Hassanation 2012-08-26 13:03:41

1

你需要做以下之一:

  • 包括SQL Server Express中的客戶機上安裝的安裝過程
  • 使用服務器上的集中式SQL Server的一部分,你和你的客戶有機會獲得

還有其他的,你可以使用數據訪問策略,如串行數據爲XML,或使用不同的數據庫就像SQLite或使用Web服務,但簡單地說,如果SQL Server Express沒有安裝在客戶機上,你不能強制它工作。

+0

如果我使用SQLite那裏不需要在客戶機上安裝SQL Server,不是嗎? – Hassanation 2012-08-17 13:33:16

+1

不需要。SQLite是與SQL Server Express或SQL Server完全不同的產品。你的代碼需要改變,你需要閱讀SQLite文檔,但是如果你想要一個沒有設置的小本地數據庫,這是一個選項。我會從這裏開始http://decoding.wordpress.com/2009/01/14/using-sqlite-with-net/以及谷歌「從.net使用sqlite」 – David 2012-08-17 16:05:00

0

如果在服務器計算機上使用centerl數據庫並且其他所有客戶端計算機都可以訪問該服務器。

如果這是你可以做以下的方法:

首先你改變你的程序寫入文件DSN在啓動硬盤了程序的

使用下面的代碼示例

private void MakeDSN() 
     { 
      try 
      { 
       if (!System.IO.Directory.Exists(@"C:\OTPub")) 
       { 
        System.IO.Directory.CreateDirectory(@"C:\OTPub"); 
       } 

       if (File.Exists(@"C:\OTPub\Ot.dsn")) //delete ErrorLogFile 
       { 
        File.SetAttributes(@"C:\OTPub\Ot.dsn", FileAttributes.Temporary); 
        File.Delete(@"C:\OTPub\Ot.dsn"); 
       } 
       string con = "[ODBC]"; 
       string driver = "DRIVER=SQL Server"; 
       string uid = "UID=sa"; 
       string DB = "DATABASE=OTData"; 
       string server = "SERVER=10.63.210.111"; 

       var tw = new StreamWriter(@"C:\OTPub\Ot.dsn", true); // make file in location 
       using (tw) 
       { 
        tw.WriteLine(con); //write dataline 
        tw.WriteLine(driver); 
        tw.WriteLine(uid); 
        tw.WriteLine(DB); 
        tw.WriteLine(server); 
       } 

       lbserver.Text="LOGIN "+server; 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("File DSN Error!"); 
      } 
     } 

輸入服務器IP作爲string server

現在,您可以使用單獨的類連接

using System.Data.Odbc; 

    class DataBaseConnection 
    { 
     private OdbcConnection conn1 = new OdbcConnection(@"FILEDSN=C:/OTPub/Ot.dsn;" + "Uid=sa;" + "Pwd=123;"); 

     //insert,update,delete 
     public int SetData(string query) 
     { 
      try 
      { 
       conn1.Open(); 
       OdbcCommand command = new OdbcCommand(query, conn1); 
       int rs = command.ExecuteNonQuery(); 
       conn1.Close(); 
       return rs; 
      } 
      catch (Exception ex) 
      { 
       conn1.Close(); 
       throw ex; 
      } 
     } 

     //select 
     public System.Data.DataTable GetData(string sql) 
     { 
      try 
      { 
       conn1.Open(); 
       OdbcDataAdapter adpt = new OdbcDataAdapter(sql, conn1); 
       DataTable dt = new DataTable(); 
       adpt.Fill(dt); 
       conn1.Close(); 
       return dt; 
      } 
      catch (Exception ex) 
      { 
       conn1.Close(); 
       throw ex; 
      } 
     } 
    } 

現在,你可以寫下面的代碼你的不同需要的地方連接到數據庫,

DataBaseConnection db = new DataBaseConnection(); 

如果您需要SELECT查詢:

DataTable dt = db.GetData("SELECT * From TestTable"); 

如果你需要插入,更新,刪除查詢

int i=db.SetData("INSERT INTO TestTable(name,address,tel) VALUES (testname,Colombo,0777125896) "); 

此方法可以使用con不需要任何配置就可以訪問數據庫。

重要提示:請記住在出於安全目的退出應用程序時刪除DSN文件。

希望這會幫助你!

相關問題