많은 친구들이 .net 프로그램에서 ACCESS 데이터베이스의 상대 경로 문제로 인해 프로그램을 이동할 때마다 web.config를 수정해야 하는 문제로 고민하고 있습니다.
데이터베이스 연결 문자열의 데이터베이스 경로입니다.
많은 사람들이 web.config에 다음을 작성합니다.
<앱 설정>
<add key="OLEDBCONNECTIONSTRING" value="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:webApp_DataData.mdb)"></add>
</app설정>
프로그램은 다음과 같이 작성됩니다.
MyConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]);//참고: VS2005와 VS2003에서는 ConfigurationSettings가 다르게 작성됩니다.
이런 식으로 프로그램이 실행될 때 다음과 같은 오류가 발생하는지
직접 확인하세요.다음과 같은 메시지가 자주 표시됩니다.
'C:WINDOWSsystem32~App_DataData.mdb'는 유효한 경로가 아닙니다. 경로 이름의 철자가 올바른지, 파일이 저장된 서버에 연결되어 있는지 확인하십시오. 데이터 소스=~App_DataData.mdb
절대경로가 정확하더라도 프로그램 이식 시 web.config를 수정해야 하므로 더욱 번거롭습니다.
web.config에서 ASP처럼 Server.MapPath를 사용하여 데이터베이스 경로를 얻는 방법도 있지만 web.config는 Server.MapPath를 인식하지 못하므로 이 방법은 작동하지 않습니다.
이후 다른 프로그램에 대한 탐색과 참조를 통해 ACCESS 데이터베이스 경로를 수정하지 않고도 프로그램 경로를 쉽게 이식할 수 있는 다음과 같은 방법을 결론지었습니다.
web.config에 작성한 내용은 다음과 같습니다.
<appSettings>
<add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source="/>
<키 추가="dbPath" 값="~/App_Data/mydata.mdb"/>
</app설정>
프로그램의 데이터 액세스 클래스에서 "SQLConnString"과 "dbPath"를 꺼내서 "CONN_STRING_NON_DTC"라는 문자열로 연결했습니다.
public static readonly string CONN_STRING_NON_DTC = System.Configuration.ConfigurationManager.AppSettings["SQLConnString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbPath"]) + ";";
이것은 VS2005의 쓰기 방법입니다. 사용하기 쉽도록 CONN_STRING_NON_DTC를 정적 읽기 전용으로 정의했습니다.
글쎄, 이렇게 하면 데이터베이스의 경로에 신경 쓰지 않고 마음대로 프로그램을 이식할 수 있습니다. ^_^, 나 같은 게으른 사람들에게 적합합니다!