Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使oledb程序在不同的pc上工作_C#_Database_Oledb - Fatal编程技术网

C# 如何使oledb程序在不同的pc上工作

C# 如何使oledb程序在不同的pc上工作,c#,database,oledb,C#,Database,Oledb,嘿,我是编程新手,从未制作过需要在另一台电脑上运行的实际程序。该程序与数据库相连。当我在另一台电脑上时,我会更改program.exe.config文件,以便可以应用数据库的正确位置,但它仍然不起作用。这是我的密码,也许这里出了问题。 app.config: <connectionStrings> <add name="Program.Properties.Settings.InventoryDBConnectionString" connectionS

嘿,我是编程新手,从未制作过需要在另一台电脑上运行的实际程序。该程序与数据库相连。当我在另一台电脑上时,我会更改program.exe.config文件,以便可以应用数据库的正确位置,但它仍然不起作用。这是我的密码,也许这里出了问题。 app.config:

<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>

首先,您要在应用程序配置文件中指定连接字符串:

<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>
您应该做的是从应用程序的配置中提取连接字符串:

//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);
你还可以做一个改变。连接字符串条目本身指定要使用的提供程序:

providerName="System.Data.OleDb"
但是,您可以自己使用该提供商:

OleDbConnection con = new OleDbConnection(...);
如果将连接字符串更改为使用其他提供程序:

providerName="System.Data.SqlClient"
您的代码仍将使用OLEDB连接,而不是应用程序配置中给定的提供程序

幸运的是,.NET framework有一个方便的小助手功能,它可以为您创建正确的提供者:

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;
}

你确定你在那台电脑上有路径
D:\School\Stage\Program testen\Program\bin\Debug
?它在我的电脑上工作,但当我把它转移到另一台电脑上时,我打开Program.exe.config,这样我就可以在那台电脑上更改位置,当我运行它时会显示一个错误正确显示什么错误?目标计算机上是否安装了Microsoft Access运行时的Microsoft Access(假设您似乎使用Access数据库作为后端)?好的,因此在另一台电脑中,我更改了program.exe.config中的路径,但是它说路径无效,然后它首先显示上一个pc位置的路径,而不是新位置的路径。不要假设所有计算机的
FilePath\Directory name
都与您的计算机相同。我会添加代码来检查用户计算机上是否存在该目录,如果不存在,则创建该目录,这也可能是一个潜在问题,因为例如在
美国
例如
D:
驱动器是一个CD/DVD驱动器,据我所知,所有PC都至少有一个
C驱动器。。听起来您可能想重新考虑您的解决方案/支持
providerName="System.Data.SqlClient"
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;
}