2011-05-08 6 views
2

나는 ado.net을 사용하여 Sqlite 데이터베이스에 연결하는 클래스 응용 프로그램을 가지고 있습니다. 응용 프로그램은 db를 사용하여 일부 데이터를 저장하며 db는 런타임에 변경 될 수 있습니다. 사용자는 db의 백업을 만들고 위치를 변경할 수 있지만,이 경우 연결 문자열을 변경하는 방법을 알아야합니다. 이 코드를 시도했지만 작동하지 않았다런타임에 클래스 응용 프로그램의 연결 문자열을 변경 하시겠습니까?

string conn = 
    @"metadata=res://*/KzDm.csdl|res://*/KzDm.ssdl|res://*/KzDm.msl;" + 
    @"provider=System.Data.SQLite;" + 
    @"provider connection string=" + 
    @""" [email protected]"Data Source=" + 
    @"F:\My Own programs\KrarZara2\KZ\KZ\Kzdb.s3db" + 
    @"""; 

Entities ent = new 
Entities(conn); 

이 오류가 "키워드는 지원되지 않습니다 :. '데이터 원본'" 이 라인

public Entities(string connectionString) : base(connectionString, "Entities") 

답변

1

내가 그것을 작성하고 그것을 나와 함께 일

EntityConnectionStringBuilder conn = new EntityConnectionStringBuilder(); 
     conn.Metadata = @"res://*/KzDm.csdl|res://*/KzDm.ssdl|res://*/KzDm.msl"; 
     conn.Provider = "System.Data.SQLite"; 
     conn.ProviderConnectionString = @"data source=F:\My Own programs\KrarZara2\KZ\KZ\KrarDS.krar;Version=3;"; 
     EntityConnection entity = new EntityConnection(conn.ConnectionString); 
     using (DmEnt ent = new DmEnt(entity)) 
     { 
      var parcel = ent.Parcels.SingleOrDefault(d => d.id == 1); 
      var pparcc = ent.Parcels.Select(d => d.id == 2); 
      Parcel r = new Parcel(); 
      r.ParcelNumber = "11ju"; 
      r.Area = 8787; 

      ent.AddToParcels(r); 
      ent.SaveChanges(); 
     } 

DM 엔트는 edmx의 ado.net에서 개체 모델은

0

잘못된 라인 순서에서 발생 ,해야한다 :

@""" + 
    @"Data Source=" + 
+0

지금 그가 나에게 키워드가 지원되지 않는 다른 오류를 줄입니다. –

0

내가 연결 문자열이 전혀 작동하는지 실제로 놀랄 것입니다. 또한,이 연결 문자열을 구축 및 String.format를 사용하는 것이 더 간단 할 것이다 :

var filename = @"F:\My Own programs\KrarZara2\KZ\KZ\Kzdb.s3db"; 
var connString = string.Format("Data Source={0};UseUTF16Encoding=True;", filename); 

using(var conn = new SQLiteConnection(connString)) 
{ 
    ... 
} 

첫째, 당신은 당신의 설정에 대한 적절한 값으로 UseUTF16Encoding 대체 할 것이다. 둘째, 연결 문자열의 파일 경로는 따옴표로 묶이지 않습니다. 솔루션의 요약은 엔티티 프레임 워크 연결을 구문 분석하는 것입니다

SQLite and Entity Framework 4

:


당신은이 블로그 항목에서 볼 수있는 런타임에 SQLite는 데이터 파일을 교환 할 수있는 방법을 찾고 있다면 당신이 좋아하는 일을 할 것,

public static string RedirectedEntityFrameworkConnectionString(string originalConnectionString, string databaseFile, string password) 
{ 
    // Parse the Entity Framework connection string. 
    var connectionStringBuilder = new EntityConnectionStringBuilder(originalConnectionString); 
    if (connectionStringBuilder.Provider != "System.Data.SQLite") 
    { 
     throw new ArgumentException("Entity Framework connection string does not use System.Data.SQLite provider."); 
    } 

    // Parse the underlying provider (SQLite) connection string. 
    var providerConnectionStringBuilder = new SQLiteConnectionStringBuilder(connectionStringBuilder.ProviderConnectionString); 

    // Redirect to the specified database file, and apply encryption. 
    providerConnectionStringBuilder.DataSource = databaseFile; 
    providerConnectionStringBuilder.Password = password; 

    // Rebuild the Entity Framework connection string. 
    connectionStringBuilder.ProviderConnectionString = providerConnectionStringBuilder.ConnectionString; 
    return connectionStringBuilder.ConnectionString; 
} 

을 사용하려면 : : 문자열을 다시 설정 한 후 데이터 파일을 변경하고

'데이터 원본'
const string OriginalConnectionString = "..."; // (Copy out of app.config) 
var connectionString = RedirectedEntityFrameworkConnectionString(OriginalConnectionString, myFileName, null); 
using (var context = new MyEntities(connectionString)) 
{ 
    ... 
} 
+0

같은 오류가 있지만이 시점에서 질문을 변경합니다. var connectionStringBuilder = new EntityConnectionStringBuilder (originalConnectionString); –

+0

@Khalid Omar - 연결 문자열을 수동으로 사용할 수 있는지 확인 했습니까? 즉, 작은 프로젝트를 채우고 데이터베이스에 연결하기 위해 연결 문자열을 연결하십시오. – Thomas

+0

예 수동으로 사용했는데 app.config에서 이전 연결 문자열 인 경우 응용 프로그램이 변경 될 때 응용 프로그램이 제대로 작동하는지 확인합니다. –

관련 문제