2016-03-25 38 views
0

Hey Programlamada yeniyim ve başka bir bilgisayarda çalışması gereken gerçek bir program yapmadım. Program bir veri bankası ile bağlantılıdır. Başka bir bilgisayardayken program.exe.config dosyasını değiştirdim, böylece veri bankasının doğru konumunu uygulayabiliyorum ama hala çalışmıyor. Burada sahip olduğum kod, belki burada bir şey yanlış. app.config: Standart kodundaNasıl oledb programımı farklı bir bilgisayarda çalışıyorum

<connectionStrings> 
    <add name="Program.Properties.Settings.InventoryDBConnectionString" 
     connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\School\Stage\Program testen\Program\bin\Debug\InventoryDB.accdb" 
     providerName="System.Data.OleDb" /> 
</connectionStrings> 

: Sen değiller

<connectionStrings> 
    <add name="Program.Properties.Settings.InventoryDBConnectionString" 
     connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\School\Stage\Program testen\Program\bin\Debug\InventoryDB.accdb" 
     providerName="System.Data.OleDb" /> 
</connectionStrings> 

:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\School\Stage\Program testen\Program\bin\Debug\InventoryDB.accdb"); 
+0

Eğer bu yolu 'Ge emin misiniz \ Program testen \ Program \ bin \ Debug' o PC'de? –

+0

benim bilgisayarımda çalışır, ancak farklı bir dosyaya aktardığımda, THF pc üzerindeki konumu değiştirebilmem için program.exe.config dosyasını açtım ve çalıştırdığımda bir hata gösteriyor – Viktor

+0

Tam olarak hangi hata gösteriliyor? Microsoft Access Runtime'in Microsoft Access'in hedef makinede yüklü olması (Erişim Veritabanını arka uç olarak kullandığınız göz önüne alındığında)? –

cevap

0

ilk şey bir bağlantı, uygulama yapılandırma dosyasında dize belirterek olmasıdır Bağlantı dizesini Program.exe.config'dan kullanarak, bunun yerine bağlantı dizesini kopyalayıp yapıştırabilirsiniz. Eğer biraz kodunuzu değiştirirseniz

, belki ne demek istediğimi görebilirsiniz:

//Get the connection string to use 
String connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\School\Stage\Program testen\Program\bin\Debug\InventoryDB.accdb"; 

//Open a connection to the database 
OleDbConnection con = new OleDbConnection(connectionString); 

Ne uygulamanın yapılandırmasından bağlantı dizesini çekiyor yapıyor olmalı:

//Get our connection string setting, and the connectionString it contains 
ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["Program.Properties.Settings.InventoryDBConnectionString"]; 
String connectionString = cs.ConnectionString; 

//Open a connection to the database 
OleDbConnection con = new OleDbConnection(connectionString); 

yoktur yapabileceğiniz bir değişiklik daha. Kişisel bağlantı dizesi giriş kendisi kullanmak istediğiniz sağlayıcı belirtir:

providerName="System.Data.OleDb" 

Ama sonra devam edebilir ve bu sağlayıcı kendiniz kullanın: Farklı bir sağlayıcı kullanmak üzere bağlantı dizesi değiştirdiyseniz

OleDbConnection con = new OleDbConnection(...); 

:

providerName="System.Data.SqlClient" 

kodunuzu hala OleDbConnection yerine aplikasyonla verilen sağlayıcısını kullanarak olacağını tion konfigürasyonu.

Neyse ki, .NET framework o için doğru sağlayıcı oluşturabilir kullanışlı küçük yardımcı işlevi vardır kullanarak: \ Okul \ Aşaması:

public static DbConnection GetConnection() 
{ 
    //Get the connection string info from our application config 
    ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["Program.Properties.Settings.InventoryDBConnectionString"]; 

    if (cs == null) 
     throw new Exception("Could not find connection string settings"); 

    //Get the factory for the given provider (e.g. "System.Data.OleDbClient") 
    DbProviderFactory factory = DbProviderFactories.GetFactory(cs.ProviderName); 

    if (factory == null) 
     throw new Exception("Could not obtain factory for provider \"" + cs.ProviderName + "\""); 

    //Have the factory give us the right connection object 
    DbConnection conn = factory.CreateConnection(); 

    if (conn == null) 
     throw new Exception("Could not obtain connection from factory"); 

    //Knowing the connection string, open the connection 
    conn.ConnectionString = cs.ConnectionString; 
    conn.Open(); 

    return conn; 
} 
İlgili konular