2011-06-30 27 views
0

我在寫一個應用程序需要連接到sql server。我更喜歡用Java編寫應用程序。但是當我嘗試連接到服務器時,我得到了連接拒絕錯誤。我正在使用JTDS JDBC驅動程序。我認爲這是由於1433或1434端口未打開。服務器在我的工作地點,我無法更改端口。但有趣的是,我使用c#編寫相同的東西,它連接成功。是否因爲C#庫中的SqlConnection類與ms sql server更好地協作?或者我在這裏做錯了什麼?僅供參考,我們正在使用的服務器是MS SERVER 2003.當談到連接到Sql Server數據庫時,Java和C#有什麼區別?

對不起,我以前沒有提供任何代碼。一個棘手的部分是我們擁有的服務器在本地網絡上被稱爲「服務器」。

C#:

SqlConnection objConnection = new SqlConnection("Data Source= SERVER\\SQLEXPRESS;Initial Catalog=SSS;Persist Security Info=True;User ID=user;Password=pass"); 
SqlCommand objcommand = new SqlCommand(); 
string strSQL; 
objcommand.Connection = objConnection; 
strSQL = "select * from company where companyid = @companyID "; 
try 
{ 
objConnection.Open(); 
SqlDataReader Query = objcommand.ExecuteReader(); 
      while (Query.Read()) 
      { 
       MessageBox.Show(Convert.ToString(Query["clientRef"])); 

      } 
      objConnection.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error Retreiving info: " + ex.ToString(), "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      objConnection.Close(); 
     } 

由於我沒有真正熟悉C#。我從其中一所大學獲得了上述代碼。它會正確返回信息。

的Java:

try{ 
Connection connection; 
Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
connection = DriverManager.getConnection("jdbc:jtds:sqlserver://network.local/SERVER\\SQLEXPRESS:1433/SSS","user","pass"); 
System.out.println("Connection succeed!"); 
} 
catch (Exception e) { 
e.printStackTrace(); 
} 

上面的Java代碼了網絡錯誤IOException:連接被拒絕的錯誤。僅供參考:我可以成功ping通server.network.local。但是當我telnet server.network.local 1433/1434時,我得到了telnet:無法連接到遠程主機:連接被拒絕。

+1

他們都應該工作 - 聽起來就像你只需要調試java端。 – skaz

+0

你一定是做錯了,因爲java可以完美地連接到MS Sql。檢查你的連接字符串。 – Jethro

+0

簡短的回答:沒有任何...你在代碼中犯了一個錯誤。向我們展示你在這兩種情況下做了什麼...... !!! –

回答

3

檢查您的.NET應用程序如何連接。這可能與使用命名管道一樣簡單,JTDS也支持該命名管道。

0

這可能是默認值是不同的,你設置的端口,當你初始化你的驅動

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]] 

像這樣的事情jdbc:jtds:sqlserver://nameofyourdatabaseserver.or.ipaddress:port/yourdatabasename

嘗試使用完整的DNS名稱爲您的服務器或IP地址