C# 对象无法在Win7 x64上实例化
我已经搜索了很多次,但没有找到任何有用的东西,所以我来了 我已经用C#(任何CPU设置)编写了一个应用程序,它已经在Windows7和XPx86上运行了一段时间,没有出现错误 最近,我的办公室将我的工作站升级到Windows 7 x64(从x86) 当我在VisualStudio2010中运行我的应用程序时,我在运行或编译时没有收到任何错误。它按设计工作 根据我们的MSDN订阅,我的VS2010版本是10.0.30319.1 RTMRel,框架是4.0.30319 RTMRel 当我直接运行编译后的应用程序时,使用SqlConnection对象时会收到一个错误。无论我选择任何CPU还是x86,都会出现相同的错误 在我的类文件中,这是例程:C# 对象无法在Win7 x64上实例化,c#,database,x86,64-bit,sqlconnection,C#,Database,X86,64 Bit,Sqlconnection,我已经搜索了很多次,但没有找到任何有用的东西,所以我来了 我已经用C#(任何CPU设置)编写了一个应用程序,它已经在Windows7和XPx86上运行了一段时间,没有出现错误 最近,我的办公室将我的工作站升级到Windows 7 x64(从x86) 当我在VisualStudio2010中运行我的应用程序时,我在运行或编译时没有收到任何错误。它按设计工作 根据我们的MSDN订阅,我的VS2010版本是10.0.30319.1 RTMRel,框架是4.0.30319 RTMRel 当我直接运行编译
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还是到Configuration manager,并且确实抛出了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安装,没有任何插件。非常感谢您的帮助。为了验证功能,我将使用以下代码片段进行测试。您当前的代码在处理逻辑中有一个缺陷,这使事情变得复杂
string connectionString = ConfigurationManager.ConnectionStrings["KpH2Oprod"].ConnectionString;
using( SqlConnection sc = new SqlConnection( connectionString ) )
{
sc.Open();
// perform simple data access
}
如何在.config文件中为初学者定义连接字符串。。?
我需要看那么多
另外,我会像这样定义sqlConn
sqlConn = ConfigurationSettings.AppSettings["connectionString"]; //assuming this is what you named your connection string..
其次,我将使用Try-catch{},并将using(){}放在该Try中
如果您不想处理该sqlConn。。然后将其设为静态属性
公共静态SQLConnection sqlConn=null
那么如果你需要使用它。。如上所述,在using(){}中使用新构造。。
如果您想使用原始构造枚举连接字符串变量,也请查看此链接是否有方法仅捕获原始异常/堆栈跟踪?此外,如果catch子句中只有throw语句,则没有任何好处。这里的情况与@DJKRAZE:连接字符串的情况相同这并不重要,因为他甚至在设置连接字符串属性之前就得到了异常。函数的要点是返回一个SqlConnection对象。返回已处理的对象将是无用的!加布,我想你是在开玩笑。他们所说的是他的代码的结构方式。他永远无法根据最初编写代码的方式返回有效的SQLConnection对象@在我看来,Tim做出了可能是迄今为止最好的推荐,也让我想知道他在标题中的using部分是什么样子的。他使用的是System.Data.SqlClient吗@Gabe-确切地说,我指出OPs当前代码将在finally块中抛出NullReferenceException
,或者(如果更新以修复空检查)将在调用方可以使用连接之前处理连接。@DJKRAZE:OP的代码始终返回有效对象,但Win 7 x64上不在调试器下时除外(其中,SqlConnection
构造函数抛出异常)。修复异常处理的方法是将其删除(因为当前它什么都不做)提议将使他的代码永远无法工作。很抱歉延迟回复。这已成为一个非问题。我的计算机崩溃了…两次…技术人员用Windows 7 32位重新安装了它,应用程序再次正常工作。听起来不错,但我想知道你是否有win7 64位的更新问题我只有一个问题。敲敲木头h VS2010/2008在我的wind 7 64位上,但安装了vs的更新,没有其他问题..很抱歉听到你的电脑一直崩溃。。