对象无法在Win7 x64上实例化

本文关键字:x64 实例化 Win7 对象 | 更新日期: 2023-09-27 18:19:52

我搜索了很多,没有找到任何有用的东西,所以我来了。

我用C#(任何CPU设置)编写了一个应用程序,它已经在Windows7和XPx86上运行了一段时间,没有出现错误。

最近,我的办公室已将我的工作站升级到Windows 7 x64(从x86)。

当我在VisualStudio2010中运行应用程序时,在运行或编译时不会收到任何错误。它按设计工作。

我的VS2010版本是我们MSDN订阅的10.0.30391RTMRel,框架是4.0.30319 RTMRel

当我直接运行编译后的应用程序时,我在使用SqlConnection对象时收到一个错误。无论我选择ANYCPU还是x86,都会发生相同的错误。

在我的类文件中,这是例程:

        public static SqlConnection getDBConnection()
    {
        SqlConnection sqlConn = null;
        try
        {
            sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString);
            sqlConn.Open();
        }
        catch
        {
            throw;
        }
        finally
        {
            if (sqlConn == null)
            {
                sqlConn.Dispose();
            }
        }
        return sqlConn;
    }

在一些手动跟踪中,我发现错误不是在第一次实例化SqlConnection sqlConn = null;之后抛出的,而是在我实际将其设置为时抛出的

sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString);

我已将此行更改为:

 sqlConn = new SqlConnection();
 sqlConn.ConnectionString = ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString;

查看它是SqlConnection还是到配置管理器,实际上它在sqlConn = new SqlConnection();行上抛出。事实上,这就是我开始的方式,并将其更改为前一个,不管怎样,在使用新指令时都会抛出错误。

我得到的实际错误消息是(其中一些是我自己的消息):

我认为这可能与SQL对象的注册方式有关,但消息在指向参数g为null的前几行的中心被截断(而不是我所做的)。同样,这在调试器中可以完美地工作。

RunTimeError : 
Value cannot be null.
Parameter name: g
at System.Guid..ctor(String g)
at kpH2O.frmMain..ctor() (mscorlib)
ACTION : 
UPDATEINCIDENT ()
PROGRESS : 
WORKING ()
RunTimeError : 
Object reference not set to an instance of an object.
at kpH2O.db.getDBConnection()
at kpH2O.db.getIncidentIDFromNumber(String incidentNumber)
at kpH2O.frmMain.updateHeatIncident() (kpH2O)
ERROR : 
Process UPDATEINCIDENT: FAILED (doStartUp)

这是一个开箱即用的VS2010安装,没有任何插件。非常感谢您的帮助。

对象无法在Win7 x64上实例化

如何在.config文件中为初学者定义连接字符串。。?需要看到那么多

我也会考虑像这个一样定义您的sqlConn

sqlConn = ConfigurationSettings.AppSettings["connectionString"]; //assuming this is what you named your connection string.. 

第二,我会使用Try-catch{},并在Try-中放入using(){}

如果您不想处理sqlConn。。然后使其成为静态属性

公共静态SQLConnection sqlConn=null;

那么如果你需要使用它。。如上所述,在using(){}中使用新构造。。如果您想使用原始构造ConfigurationSetting和管理器枚举连接字符串变量,也可以查看此链接

为了验证功能,我会用这样的代码段进行测试。您当前的代码在处置逻辑中有一个缺陷,这只会使事情变得复杂。

string connectionString = ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString;
using( SqlConnection sc = new SqlConnection( connectionString ) )
{
    sc.Open();
    // perform simple data access
}