복붙노트

[SQL] SQL Express를 연결 문자열 : 응용 프로그램 위치에 MDF 파일 위치에 상대적인

SQL

SQL Express를 연결 문자열 : 응용 프로그램 위치에 MDF 파일 위치에 상대적인

나는 C #에서 단위 테스트 프로젝트의 일환으로 SQL 익스프레스의 데이터베이스를 사용하고 있습니다. 내 데이터베이스는 여기에 있습니다 :

./Databases/MyUnitTestDB.mdf

차라리 내 연결 문자열로 정의를 갖는 것보다의 app.config에서 상대 경로 또는 변수를 사용하고 싶습니다 :

AttachDbFilename=C:\blah\blah\blah\yea\yea\yea\MyApplication\Databases\MyUnitTestDB.mdf 

DataDirectory를 | 내가의 사용을 보았다 | 하지만이 웹 애플리케이션에만 적용 할 생각에 수정입니까?

나는 응용 프로그램이 호스팅 SQL 데이터베이스를 사용하여 생산에서와 같이 응용 프로그램 구성 파일에서이를 제어 할.

해결법

  1. ==============================

    1.감사합니다 모든 사람이, 당신의 응답의 조합을 사용했다.

    감사합니다 모든 사람이, 당신의 응답의 조합을 사용했다.

    다음과 같이 내 app.config 파일에서 내 연결 문자열이 정의된다

    <add name="MyConnectionString"
        connectionString="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Database=MyDatabaseForTesting;Trusted_Connection=Yes;" />
    

    내 단위 테스트 클래스에서 나는 다음을 사용하여 DataDirectory를 속성을 설정

    [TestInitialize]
    public void TestInitialize()
    {
        AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases"));
    
        // rest of initialize implementation ...
    }
    
  2. ==============================

    2.예, | DataDirectory를 | 웹 응용 프로그램은 웹 응용 프로그램의 App_Data 디렉터리를 선택합니다.

    예, | DataDirectory를 | 웹 응용 프로그램은 웹 응용 프로그램의 App_Data 디렉터리를 선택합니다.

    하지 않은 웹 응용 프로그램에서 .NET 프레임 워크에 따라, 그것은 사용되며 AppDomain.SetData를 사용하여 변경 될 수 있습니다

    하지만 당신은 연결을 만들 수있는 다른 두 가지 가능성이있다 :

    1 .- 상대 경로를 사용합니다 :

    String con ="... AttachDbFilename=Databases\MyUnitTestDB.mdf ... ";
    

    응용 프로그램 경로를 얻을 문자열에 추가 2 .-. C #을 Windows 응용 프로그램에서 당신은 Application.StartupPath을 사용할 수 있습니다

     String con= " ... AttachDbFilename=" + Application.StartupPath + "\Databases\MyUnitTestDB.mdf ... ";
    

    응용 프로그램 유형 또는 실행 모드에 따라 서로 다른 특성을 얻었다. 전의:

    당신은 여기에 다른 연결 문자열 옵션에 대한 자세한 내용을 찾을 수 있습니다 http://www.connectionstrings.com/sql-server-2005

  3. ==============================

    3.나는 통해이 일을 마지막으로이에서 단서를 가지고 인터넷 검색 하루 종일 보냈다

    나는 통해이 일을 마지막으로이에서 단서를 가지고 인터넷 검색 하루 종일 보냈다

    여기 내 솔루션입니다 : 1. | DataDirectory를 | 연결 문자열

    <add name="NorthwindConnectionString" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDbFilename=|DataDirectory|\Northwind.mdf;User Instance=True" providerName="System.Data.SqlClient" />
    

    ClassInitialize에서 삭제 2. DataDirectory를

    [ClassInitialize()]
    public static void MyClassInitialize(TestContext testContext)
    {
        string baseDir = AppDomain.CurrentDomain.BaseDirectory;
        int index = baseDir.IndexOf("TestResults");
        string dataDir = baseDir.Substring(0, index) + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
        AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
    }
    

  4. ==============================

    4.나는 Windows가 C # 3.0 VS2010로 앱을 형성하는 간단한 짓고 있어요. 또한 SQL Express를 2008 RC2를 사용하여.

    나는 Windows가 C # 3.0 VS2010로 앱을 형성하는 간단한 짓고 있어요. 또한 SQL Express를 2008 RC2를 사용하여.

    아무 것도 변경하지 않고 단독으로 연결 문자열에 MyDb.mdf | DataDirectory를 | :를 내가 사용할 수 있어요. | DataDirectory를 | 내 .exe 파일의 위치를 ​​가리 킵니다.

    내가 VS와 SQL 버전을 지정하고있어 그 이유는 그래서 나는이 당신의 모든 시도 할 첫 번째 일이 될 것이라고 생각합니다. 아니면 그것은 C #을 3.0의 새로운 기능입니다.

    내 완전한 연결 문자열 :

    "Server=.\SQLExpress;AttachDbFilename=|DataDirectory|App_Data\ThumbsUpPlayer.mdf;Database=ThumbsUpPlayer;Trusted_Connection=Yes;"
    

    내가 그 폴더에있는 DB를 사용 해요 때문에 나는 내 응용 프로그램에 "App_Data"폴더를 추가 한 주, 폴더가 VS.에서 인식되지 않습니다

  5. ==============================

    5.나는 무엇에 대해 여기에 비주얼 스튜디오를 가지고,하지만하지 않습니다

    나는 무엇에 대해 여기에 비주얼 스튜디오를 가지고,하지만하지 않습니다

    using System.IO;
    using System.Windows.Forms;
    
    string appPath = Path.GetDirectoryName(Application.ExecutablePath);
    AttachDBFilme = appPath + "\\MyUnitTestDB.mdf"
    
  6. ==============================

    6.나는 다음을했다. 희망이 사람을 도움이됩니다.

    나는 다음을했다. 희망이 사람을 도움이됩니다.

    AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + "../../App_Data"));
    
  7. ==============================

    7.

    SqlConnection  con="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Database=MyDatabaseForTesting;Trusted_Connection=Yes;" ;
    
  8. from https://stackoverflow.com/questions/3500829/sql-express-connection-string-mdf-file-location-relative-to-application-locatio by cc-by-sa and MIT license