2009-07-07 18 views
0

c#からSQL Serverの名前付きインスタンスに接続しようとしています。私はこのサイトで同様の記事を見ましたが、私が持っている問題はないようです。C#名前付きインスタンスに接続するときにSQL Server Extra Slashが文字列に追加される

テーブルから値を文字列に読み込みます。名前付きインスタンスを文字列に入れると、スラッシュが追加され、接続されません。したがって、データベースフィールドに "myserver \ myinstance"がある場合、それを文字列に読み込むと、 "myserver \ myinstance"として終了します。興味深いことに、文字列ビルダークラスを使用する場合は、スラッシュが1つしかありません。それを文字列に変換すると、余分なスラッシュができます。私の問題はSQL関連ではなく、文字列関連のように聞こえる。

public class MyClass 
{ 

private Hashtable ipAddresses; 

private void LoadPlants() 
    { 
     // get a list of plants from the plant table 
     String conString = "Data Source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;"; 
     string strSql = "select distinct ServerName, IPAddress from location where ipaddress is not null and ltrim(rtrim(ipaddress)) <> ''"; 


     SqlConnection con = new SqlConnection(conString); 
     con.Open(); 
     SqlDataAdapter dAdapter = new SqlDataAdapter(); 

     dAdapter.SelectCommand = new SqlCommand(strSql, con); 

     DataSet dset = new DataSet(); 
     dAdapter.Fill(dset, "location"); 
     con.Close(); 

     // populate the checked list box with the list of plants 
     DataTable dt = dset.Tables["location"]; 
     ipAddresses = new Hashtable(); 



     for (int i = 0; i <= dt.Rows.Count -1; i++) 
     { 
      chklbPlants.Items.Add(dt.Rows[i]["ServerName"], false); 
      string strPlantName; 
      string strIpAddress; 

      StringBuilder sb = new StringBuilder(); 
      sb.Append(dt.Rows[i]["IPAddress"].ToString()); // returns 192.168.0.3\mydbinstance 

      strPlantName = dt.Rows[i]["ServerName"].ToString(); 
      strIpAddress = dt.Rows[i]["IPAddress"].ToString(); // returns 192.168.0.3\\mydbinstance 

      ipAddresses.Add(dt.Rows[i]["ServerName"].ToString(), dt.Rows[i]["IPAddress"].ToString()); 
     } 



    } 

}

-- drop table location 

use someDB 

go 

create table location 
(
    ServerName varchar(255), 
    IPAddress varchar(255) 
) 


insert into location 
(ServerName, IPAddress) 
values 
('testserver1', '192.168.1.1') 

insert into location 
(ServerName, IPAddress) 
values 
('testserver2', '192.168.1.2') 
insert into location 
(ServerName, IPAddress) 
values 
('testserver3', '192.168.1.3\mydbinstance') 
insert into location 
(ServerName, IPAddress) 
values 
('testserver4', '192.168.1.4') 

go 

select * from location 

go 

私はそれはおそらくエスケープ文字とは何かを持って知っているが、私はどのようにわからない。ここで

は、あなたがそれを必要とする場合には、コードですそれを正しく扱います。

おかげで、

セス

答えて

1

は、私はあなたをチェックするつもりVSデバッガによって惑わされていません。これを見ている:VSから

using System.Diagnostics; 

namespace ConsoleApplication69 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string foo = @"back\slash"; 

      Debugger.Break(); 
     } 
    } 
} 

実行これを、それが壊れたときに、fooの上に置きます。 VSは、その後、あなたが、これはfooは、2つのバックスラッシュが含まれていることを意味するものではありません

"back\\slash" 

のように見えるのデータツールチップが表示されていることに注意してください! VSはあなたにC#リテラルを示しています。は、fooという値を得るためには、にする必要があります。 foo実際にはにはバックスラッシュが1つしか含まれていません!

だから、あなたが上でこのコメントを基づかれているもの

strIpAddress = dt.Rows[i]["IPAddress"].ToString(); // returns 192.168.0.3\\mydbinstance 

を言うとき?

あなたはすでにこれについて知っているかもしれません。しかし、私はそれをチェックする価値があると思った...

+0

あなたは正しいです。ありがとう!私はそれがちょうどタイムアウトしたと思う。あるいは、私のコードで変更されたものかもしれません。いずれにせよ、ありがとう! –

関連する問題