13. juni 2008 - 17:26Der er
20 kommentarer og 1 løsning
Path til Access (mdb) database - Visual Studio
For blot at vise lokalt hvad min hjemmeside kan, har jeg lavet en access database til den, der så kan sendes med projektet rundt, så jeg lettere kan flytte den.
Problemet for mig nu er så imidlertid, at jeg ikke ved hvordan jeg kan lave en relationel sti til den, da jeg, pga. det mønster jeg bruger, er nød til at tilgå databasen fra et andet projekt der er tilknyttet i form af et class library.
Så som det ser ud nu, så har jeg min access fil liggende i min App_Data mappe, men der hvor jeg skal kalde den fra, er et projekt som jeg tilføjede til solutionen og byggede fra bunden. Det ser dog umiddelbart ud til, at den har lagt sig i /Visual Studio 2008/projects/"solution navn"/"projekt navn".
Jeg ved desværre ikke så meget om hvordan det er Visual Studio 2008 placerer sine filer, og ved derfor slet ikke hvordan jeg skal sætte en relationel sti op.
Fordi jeg netop har to projekter der begge benytter sig af filen. Det ene projekt er min webside, og det andet er et class library, som det første projekt har liggende i en bin mappe.. Så det ved jeg ikke lige hvordan jeg skulle gøre?
Jamen hvordan finder jeg den i mit class library? Det er der problemet er. I min webside ligger det jo i min AppData, og der er der ingen problemet, men det er når jeg skal kalde den fra mit class library, at jeg har været nød til at angive en absolut sti, hvilket jeg meget gerne vil undgå. Hvordan finder jeg frem til AppData fra et andet projekt i den samme solution?
Hmm, den metode skal jeg vel bruge i code behind? Hvordan kombinerer jeg så det med min web.config? Undskyld at jeg er lidt sløv, men ved desværre ikke for meget om web endnu...
Ah, det må du undskylde Arne, kom helt fra det her spørgsmål igen. Men jeg tror jeg har blandet lidt rundt i begreberne, for det du foreslår, kan så vidt jeg kan se, ikke lade sig gøre. Jeg prøver lige igen:
Jeg har én solution med 2 projekter i. Den ene er et class library og database facade, som er deri jeg skal have linket til databasen, når jeg skifter min mdb fil ud med en egentlig database. Og det andet projekt er så det selv hjemmesiden ligger i.
Mit problem er så, at jeg har brugersystemet (det integrerede i .NET) og mine egne tabeller i den samme database. Lige pt. ligger mdb filen så i en mappe i hjemmesideprojektet, og det er den mappe jeg så skal kunne henvise til fra min database facade. Det jeg så gerne vil have, er en relationel sti. Hvordan kan jeg lave det fra min db facade?
Hvis dit library projekt altid deployes med dit web projekt, så er den nemmeste løsning at gemme det i web.config - den vil kunne tilgåes både fra kode i web projekt og library projekt.
Hvis dit library projekt også skal kunne bruges i andre sammenhænge, så kan du evt. lade koden deri teste om det er en web app og så bruge web.config og ellers app.config.
Jamen hvordan tilgår jeg web.config fra et class library der jo ikke ved at den er inkluderet i et andet projekt? Jeg mener, jeg skal jo bruge connectionstring til mit connection objekt, og hvordan får jeg fat i den i mit class library?
Hmm, der er åbenbart noget helt basisk her jeg ikke aner et klap om, for jeg kan simpelthen ikke se hvad det er jeg skal gøre?
Jeg har to forskellige projekter der ligger i den samme rod mappe. 1 class library og 1 website. I den ene ligger der en fil som jeg skal have adgang til i den anden. Ind til videre har jeg kun fået det til at virke ved at indtaste den absolutte sti til filen, men jeg vil gerne benytte mig af en relationel sti, så jeg kan flytte det rundt senere.
Det der forvirrede mig var, at hjemmesiden, når den blev kompileret, blev lagt i en mappe jeg ikke selv havde udpeget, men noget som visual studio gjorde på egen hånd (ind i dokumenter/visual studio 2008/projektnavn), og jeg derfor slet ikke har styr på hvordan filstrukturen egentlig er. Altså, med andre ord, også hvordan de to projekter så kommer til at ligge i forhold til hinanden. Men det har måske ikke noget med sagen at gøre?
Og nej, jeg tilgår den ikke via ConfigurationManager?
Beklager de mange spørgsmål, men jeg er stadig ret grøn når det kommer til hjemmesider.. :$
Det eneste jeg bruger db'en til direkte i projektet (altså uden om class library'et) er Membership, og det har jeg sat op i Web.config, og jeg tilgår derfor aldrig min connectionString andet end fra web.config selv.
System.ArgumentException was unhandled by user code Message="An OLE DB Provider was not specified in the ConnectionString. An example would be, 'Provider=SQLOLEDB;'." Source="System.Data" StackTrace: at System.Data.OleDb.OleDbConnectionString.ValidateProvider(String progid) at System.Data.OleDb.OleDbConnectionString.ValidateConnectionString(String connectionString) at System.Data.OleDb.OleDbConnectionString..ctor(String connectionString, Boolean validate) at System.Data.OleDb.OleDbConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) at System.Data.OleDb.OleDbConnection.ConnectionString_Set(String value) at System.Data.OleDb.OleDbConnection.set_ConnectionString(String value) at System.Data.OleDb.OleDbConnection..ctor(String connectionString) at easySolutions.Sql.Transaction..ctor(String localConnectionString, DatabaseType dt) in E:\Documents\School\SDP\CoreLibrary\CoreLibrary\Sql\Transaction.cs:line 110 at DataHandler.Facade.GetNewspair(Int32 currentID) in E:\Documents\Visual Studio 2008\Projects\AncientConflicts\DataHandler\Facade.cs:line 28 at news_news.Page_Load(Object sender, EventArgs e) in e:\Documents\School\Web\Projekt\BBMMO\AncientConflicts\news\news.aspx.cs:line 21 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException:
Hmm, det virker heller ikke hvis jeg laver det til SqlDBConnection:
System.Data.SqlClient.SqlException was unhandled by user code Message="An attempt to attach an auto-named database for file E:\\Documents\\School\\Web\\Projekt\\BBMMO\\AncientConflicts\\App_Data\\aspnetdb.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share." Source=".Net SqlClient Data Provider" ErrorCode=-2146232060 Class=14 LineNumber=65536 Number=15350 Procedure="" Server="\\\\.\\pipe\\DA33AC12-5940-4B\\tsql\\query" State=1 StackTrace: at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open() at easySolutions.Sql.Transaction..ctor(String localConnectionString, DatabaseType dt) in E:\Documents\School\SDP\CoreLibrary\CoreLibrary\Sql\Transaction.cs:line 106 at System.Data.SqlClient.SqlConnection.Open() at easySolutions.Sql.Transaction..ctor(String localConnectionString, DatabaseType dt) in E:\Documents\School\SDP\CoreLibrary\CoreLibrary\Sql\Transaction.cs:line 106 at DataHandler.Facade.GetNewspair(Int32 currentID) in E:\Documents\Visual Studio 2008\Projects\AncientConflicts\DataHandler\Facade.cs:line 28 at news_news.Page_Load(Object sender, EventArgs e) in e:\Documents\School\Web\Projekt\BBMMO\AncientConflicts\news\news.aspx.cs:line 21 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException:
Men da jeg bare hardcodede den fulde conncetionstring, der virkede det (med brug af en OleDBConnection), og den så således ud:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.