Avatar billede anders_cp Nybegynder
23. februar 2009 - 13:18 Der er 10 kommentarer og
1 løsning

Tilknyt database til windows-program

Hej
Jeg har lavet en windowsappl., med dataset og det, hvor jeg desværre har sat databasen forkert op. Således virker programmet kun hvis stinavnet er E:





    <connectionStrings>
        <add name="WindowsDrivere.Properties.Settings.driverdatabaseConnectionString"
            connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\DriverProgram\WindowsDrivere\Database\driverdatabase.mdb"
            providerName="System.Data.OleDb" />
        <add name="WindowsDrivere.Properties.Settings.driverdatabaseConnectionString1"
            connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\DriverProgram\WindowsDrivere\Database\driverdatabase.mdb"
            providerName="System.Data.OleDb" />
    </connectionStrings>



Jeg ønsker at vide hvordan jeg får en "virtuel sti" alla:

connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|virtuel sti|\DriverProgram\WindowsDrivere\Database\driverdatabase.mdb"
Avatar billede anders_cp Nybegynder
23. februar 2009 - 13:55 #1
Nu er jeg selv kommet lidt videre:
Source=|DataDirectory|\DriverDatabase\driverdatabase.mdb

Men der er stadig spørgsmålet tilbage; Hvordan jeg selv sætter "DataDirectory". Googlet mig frem til:

"
Since DataDirectory is app domain specific you can set it in the Application_Start event handler in global.asax.
"
Men jeg kan ikke finde nogen global.asax-fil :-(
Avatar billede arne_v Ekspert
23. februar 2009 - 14:43 #2
Du kan jo lave en.

Eller du kunne hvis det var en ASP.NET web app !

:-)

Jeg mener at de to oplagte muligheder er:

1) bruge app.config og lade slutbruger eller installations program saette en absolut sti korrekt

2) kode efter at MDB ligger i samme dir som EXE
Avatar billede anders_cp Nybegynder
23. februar 2009 - 14:59 #3
Det er forskellige drev at programmet vil blive kørt på, så en absolut sti er ikke en løsning.

Hvordan koder jeg efter at mdb ligger i samme direktorie som exe?
Avatar billede anders_cp Nybegynder
23. februar 2009 - 15:15 #4
Nu får jeg en anden mystisk fejl, som måske er relateret til ovenstående:

Når exe-filen flyttes til roden kommer den op med fejlen, hvor databasen ligger på forkerte drev-bogstav.

Jeg kan leve med at databasen ligger hvor den ligger, men exe-filen vil jeg meget gerne have til at ligge i roden af programmet. Håber du har en idé til at løse dette problem..
Avatar billede anders_cp Nybegynder
23. februar 2009 - 15:22 #5
Jeg smider lige fejlmedd. ind, som kommer når jeg flytter exe-filen til roden:
(virker hvis exe-filen ligger (selvom det er et G-drev)
G:\DriverProgram\WindowsDrivere\bin\Release\WindowsDrivere.exe


Se slutningen af denne meddelelse, hvis du vil have detaljer om,
hvordan du starter JIT-fejlfinding i stedet for denne dialogboks.

************** Undtagelsestekst **************
System.Data.OleDb.OleDbException: "E:\DriverProgram\WindowsDrivere\Database\driverdatabase.mdb" er ikke en gyldig sti. Kontroller, at stinavnet er stavet korrekt, og at du er tilsluttet den server, hvor filen findes.
  ved System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
  ved System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
  ved System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
  ved System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
  ved System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
  ved System.Data.OleDb.OleDbConnection.Open()
  ved System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
  ved System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
  ved System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
  ved WindowsDrivere.driverdatabaseDataSetTableAdapters.OperatingSystemTableAdapter.GetOperatingSystem()
  ved WindowsDrivere.MainForm.getOperatingSystem()
  ved WindowsDrivere.MainForm.Form1_Load(Object sender, EventArgs e)
  ved System.Windows.Forms.Form.OnLoad(EventArgs e)
  ved System.Windows.Forms.Form.OnCreateControl()
  ved System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
  ved System.Windows.Forms.Control.CreateControl()
  ved System.Windows.Forms.Control.WmShowWindow(Message& m)
  ved System.Windows.Forms.Control.WndProc(Message& m)
  ved System.Windows.Forms.ScrollableControl.WndProc(Message& m)
  ved System.Windows.Forms.ContainerControl.WndProc(Message& m)
  ved System.Windows.Forms.Form.WmShowWindow(Message& m)
  ved System.Windows.Forms.Form.WndProc(Message& m)
  ved System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  ved System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  ved System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Indlæste assemblies **************
mscorlib
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
WindowsDrivere
    Assemblyversion: 1.0.0.0
    Win32-version: 1.0.0.0
    CodeBase: file:///G:/DriverProgram/WindowsDrivere.exe
----------------------------------------
System.Windows.Forms
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Data
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Xml
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Configuration
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Transactions
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.Windows.Forms.resources
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_da_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
    Assemblyversion: 2.0.0.0
    Win32-version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------

************** JIT-fejlfinding **************
Hvis du vil aktivere JIT-fejlfinding, skal værdien jitDebugging indstilles
i afsnittet system.windows.forms i konfigurationsfilen
for programmet eller computeren.
Programmet skal desuden kompileres med fejlfinding
aktiveret.

Eksempel:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Når JIT-fejlfinding er aktiveret, bliver alle ikke-afviklede
undtagelser sendt til den JIT-fejlfindingsfunktion, der er registreret på computeren, i stedet for
at blive afviklet af denne dialogboks.
Avatar billede arne_v Ekspert
23. februar 2009 - 15:40 #6
Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]

vil give dig det dir hvor EXE ligger.
Avatar billede anders_cp Nybegynder
23. februar 2009 - 15:49 #7
ja, det er meget fint. Jeg får at vide at exe-filen ligger:
e:\DriverProgram\WindowsDrivere\WindowsDrivere\bin\Release

men det vidste jeg godt. Mit ønske er at kunne køre programmet fra roden. Altså e:\DriverProgram\start.exe

Så hvordan gør jeg det? Uden den kommer med database-fejlen?
Avatar billede anders_cp Nybegynder
23. februar 2009 - 16:13 #8
eller - alternativt - lave en batch fil /genvej som kan køre med det rigtige drev. Kan man det?
Avatar billede arne_v Ekspert
23. februar 2009 - 16:16 #9
Hvis MDB filen ligger i samme dir som EXE filen kan du bruge EXE filens placering til at konstruere stien til MDB filen.

Og det vil virke uanset hvor du placerer dem.
Avatar billede anders_cp Nybegynder
23. februar 2009 - 17:30 #10
hmm. det har jeg prøvet.
Endte op med at lave et program, som kørte programmet.

Jeg lukker tråden, men tak for hjælpen ;)


namespace StartDrivere
{
    class Program
    {
        static void Main(string[] args)
        {
            string linkdrive = "";
            string newlink = "";
            string localpath = @"DriverProgram\WindowsDrivere\Drivere\";
            string localDrive = @"DriverProgram\WindowsDrivere\Drivere\";
            DriveInfo[] di = DriveInfo.GetDrives();
            foreach (DriveInfo item in di)
            {
                localDrive = item.RootDirectory.ToString(); // c:\
                // locallinkpath = locallinkpath + @"DriverProgram\WindowsDrivere\Drivere\";
                DirectoryInfo dirinfo = new DirectoryInfo(localDrive);

                try
                {
                    // Determine whether the directory exist.
                    if (dirinfo.Exists)
                    {
                        linkdrive = localDrive;
                        DirectoryInfo dirinfo2 = new DirectoryInfo(localDrive + localpath);
                        if (dirinfo2.Exists)
                            newlink = localDrive + @"DriverProgram\WindowsDrivere\bin\Release\WindowsDrivere.exe";
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }


            }
            Process.Start(newlink);
        }
    }
}
Avatar billede anders_cp Nybegynder
23. februar 2009 - 17:31 #11
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester