我搜索了很多,但没有任何帮助所以我在这里。
我已经在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安装,没有任何插件。非常感谢任何帮助。
答案 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
枚举连接字符串变量,请查看此链接