对象无法在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安装,没有任何插件。非常感谢您的帮助。
如何在.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
}