对象无法在Win7 x64上实例化

时间:2012-01-10 19:33:27

标签: c# database x86 64-bit sqlconnection

我搜索了很多,但没有任何帮助所以我在这里。

我已经在C#(任何CPU设置)中编写了一个应用程序,该应用程序已经在Windows 7和XP x86上运行了一段时间而且没有错误。

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

当我在Visual Studio 2010中运行我的应用程序时,我在运行或编译时没有收到任何错误。它按设计工作。

我的VS2010版本是10.0.30319.1 RTMRel来自我们的MSDN订阅,Framework是4.0.30319 RTMRel

当我直接运行编译的应用程序时,我在使用SqlConnection对象时收到错误。如果我选择任何CPU或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安装,没有任何插件。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

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

string connectionString = ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString;

using( SqlConnection sc = new SqlConnection( connectionString ) )
{
    sc.Open();
    // perform simple data access
}

答案 1 :(得分:0)

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

我也会考虑像这样定义你的sqlConn

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

其次我会使用Try catch {}以及在该尝试中使用using(){}

如果你不想处理那个sqlConn ..然后把它变成一个静态属性

public static SQLConnection sqlConn = null;

然后如果你需要使用它..如上所述使用using(){}中的新构造。 如果要使用原始构造ConfigurationSetting and manager

枚举连接字符串变量,请查看此链接