【发布时间】:2018-08-01 11:50:04
【问题描述】:
我是编码世界的新手,因此这可能是一件愚蠢的事情。 我编写了一个软件,它将文件复制到本地磁盘并运行特定的 CMD 命令。路径存储在内部服务器上的数据库中。在我的电脑上一切正常。发布版本和安装程序等。
(即使程序做了它应该做的事情,我也很震惊......)
但是当我在另一台计算机上使用该设置时,它不会运行。我可以看到它正在工作,我查看了事件日志并找到了这个:
应用程序:EAC600Programing.exe
框架版本:v4.0.30319
说明:进程因未处理的异常而终止。
异常信息:System.InvalidOperationException
在 System.Data.OleDb.OleDbServicesWrapper.GetDataSource(System.Data.OleDb.OleDbConnectionString, System.Data.OleDb.DataSourceWrapper ByRef)
在 System.Data.OleDb.OleDbConnectionInternal..ctor(System.Data.OleDb.OleDbConnectionString, System.Data.OleDb.OleDbConnection)
在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(System.Data.Common.DbConnectionOptions, System.Data.Common.DbConnectionPoolKey, System.Object, System.Data.ProviderBase.DbConnectionPool, System.Data.Common.DbConnection)
在 System.Data.ProviderBase.DbConnectionFactory.CreateConnection(System.Data.Common.DbConnectionOptions, System.Data.Common.DbConnectionPoolKey, System.Object, System.Data.ProviderBase.DbConnectionPool, System.Data.Common.DbConnection, System.Data.Common.DbConnectionOptions)
在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionPoolGroup, System.Data.Common.DbConnectionOptions)
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(System.Data.Common.DbConnection, System.Threading.Tasks.TaskCompletionSource`1, System.Data.Common.DbConnectionOptions, System.Data.ProviderBase.DbConnectionInternal, System. Data.ProviderBase.DbConnectionInternal ByRef)
在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory, System.Threading.Tasks.TaskCompletionSource`1, System.Data.Common.DbConnectionOptions)
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory, System.Threading.Tasks.TaskCompletionSource`1, System.Data.Common.DbConnectionOptions)
在 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory)
在 System.Data.OleDb.OleDbConnection.Open()
在 Session.Broker.GetVersionFromDB(System.String)
在 EAC600Programing.Main.Fill()
在 EAC600Programing.Main..ctor()
在 EAC600Programing.Program.Main()
Main.Fill 是我用数据库中的数据填充组合框的函数。它再次使用了几个连接到数据库并获取数据的函数(在 youtube 上看到并在 stackoverflow 中阅读了它们)。 (经纪人被分成自己的类文件)我目前没有能力解决这个问题,所以如果有人可以提供帮助,那就太好了。 PS。已经检查过是否相同的 .Net 版本。他们是一样的。 (大型公司电脑网络,所以所有电脑都一样。)是的,电脑和用户都可以完全访问网络。
Broker b = new Broker();
private void Fill()
{
combo_BootCOC.DataSource = b.GetVersionFromDB("BootCOC");
combo_BootBMS.DataSource = b.GetVersionFromDB("BootBMS");
combo_BootMCS.DataSource = b.GetVersionFromDB("BootMCS");
combo_MainCOC.DataSource = b.GetVersionFromDB("MainCOC");
combo_MainBMS.DataSource = b.GetVersionFromDB("MainBMS");
if (cb_Compact.Checked)
{
combo_MainMCS.DataSource = b.GetVersionFromDB("MainMCSCompact");
}
else
{
combo_MainMCS.DataSource = b.GetVersionFromDB("MainMCS");
}
}
public class Broker
{
OleDbConnection connection;
OleDbCommand command;
private void ConnectTo()
{
connection = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = N:\Release\Electric Solution\1 Production\03 Tools\05 EAC600 Programming\DataBase.accdb");
try
{
command = connection.CreateCommand();
}
catch (Exception)
{
throw;
}
}
public Broker()
{
ConnectTo();
}
public List<double> GetVersionFromDB(string db)
{
List<double> versionList = new List<double>();
try
{
command.CommandText = "SELECT * FROM " + db;
command.CommandType = CommandType.Text;
connection.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
double v;
v = Convert.ToDouble(reader["swVersion"]);
versionList.Add(v);
}
return versionList;
}
catch (Exception)
{
throw;
}
finally
{
if (connection != null)
{
connection.Close();
}
}
}
编辑1:
Soooo,我通过安装 Access 2010 解决了第一个问题,并以这个问题结束:
应用程序:EAC600Programing.exe
框架版本:v4.0.30319
说明:进程因未处理的异常而终止。
异常信息:System.FormatException
在 System.Number.ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
在 System.String.System.IConvertible.ToDouble(System.IFormatProvider)
在 System.Convert.ToDouble(System.Object)
在 Session.Broker.GetVersionFromDB(System.String)
在 EAC600Programing.Main.Fill()
在 EAC600Programing.Main..ctor()
在 EAC600Programing.Program.Main()
所以回去看看我做错了什么。
【问题讨论】:
-
另一台计算机可能没有设置所需的驱动程序和/或 oledb。将您的 OLEDB 设置从您的计算机复制到目标计算机上
-
Alos 检查您是否可以像使用映射驱动器一样访问数据源
-
我遇到了与 OleDb 类似的问题,它只是机器上缺少/旧的 dll。 OleDb 依赖于一系列与 C++ 可再发行组件捆绑在一起的 dll,您可以从微软网站上下载。它们还附带几个其他可分发包,包括 Microsoft Access Database Engine Redistributable。我会从那里开始。
-
所以,重新安装了新的 SQL/OleDB 驱动程序,结果相同,事件日志相同。将重新启动并重试。检查数据访问。来自其他用户的完全读取权限。我的完全写入权限。我只是一个会写新途径的人。 C++ 发行版....嗯,接下来要检查一下。感谢您的反馈。
-
连接字符串中的路径对该服务器有效?