2012-01-10 42 views
0

我已經搜索了很多,並沒有什麼幫助,所以我在這裏。對象未能在Win7 x64上實例化

我已經在C#(任何CPU設置)中編寫了一個應用程序,該應用程序已經在Windows 7和XP x86上運行了一段時間,現在沒有錯誤。

最近我的辦公室已將我的工作站升級到Windows 7 x64(從x86)。

當我在Visual Studio 2010中運行我的應用程序時,在運行或編譯時沒有收到任何錯誤。它按設計工作。

我的VS2010的版本是10.0.30319.1 RTMRel從我們的MSDN訂閱,框架是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; 

看我f它是SqlConnection或配置管理器,實際上它引發sqlConn = new SqlConnection();行。實際上,這是我開始的方式,並將其更改爲以前的方式,無論如何,都會在使用新指令時拋出錯誤。

實際的錯誤消息我得到的回覆是(其中有一些是我自己的信息):

我認爲,這可能涉及到如何在SQL對象被註冊,但該消息中的中央截斷前幾行(不是我所做的)指向參數g爲空。再次,這在調試器中完美地工作。

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

有沒有辦法捕捉原始異常/堆棧跟蹤? – RQDQ 2012-01-10 19:42:24

+0

另外 - 有一個只有throw語句的catch子句沒有任何好處。 – RQDQ 2012-01-10 19:44:42

+0

這裏和你的情況一樣http://weblogs.asp.net/fmarguerie/archive/2004/08/13/214135.aspx – 2012-01-10 19:45:56

回答

0

要驗證功能,我會測試這樣的代碼片段。您目前的代碼在處理邏輯中存在缺陷,這只是使事情複雜化。

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

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

該函數的意義在於返回一個SqlConnection對象。返回丟棄的對象將是無用的! – Gabe 2012-01-10 19:54:49

+0

Gabe我認爲你在跳槍。他們說的是,他的代碼結構的方式..他永遠不會返回一個有效的SQLConnection對象的基礎上,他的代碼最初編寫的方式.. @Tim已經做出了可能是迄今爲止最好的建議,在我看來,這也讓我想知道他在使用System.Data.SqlClient時使用的部分看起來像什麼? – MethodMan 2012-01-10 20:01:20

+0

@Gabe - 的確,我指出OP的當前代碼將在finally塊中拋出'NullReferenceException',或者(如果更新爲修復空檢查)將在調用者使用它之前處理連接。 – 2012-01-10 20:05:44

0

如何在連接字符串中對於初學者你的config文件中定義..? 需要看到那麼多

我也想看看定義你sqlConn這樣

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

其次,我會利用嘗試catch {}的還有使用推杆(){}內嘗試

如果您不想處置該sqlConn ..然後使其成爲靜態屬性

public static SQLConnection sqlConn = null;

然後如果你需要使用它..使用內新構造的使用(){}如上所述.. 看看這個鏈接,以及如果你想用你的原始結構ConfigurationSetting and manager

枚舉連接字符串變量
+0

抱歉,遲遲不能回覆。這已經成爲一個非問題。我的電腦崩潰......兩次......技術人員用Windows 7 32位重新安裝它,該應用程序再次正常工作。 – 2012-02-07 02:14:28

+0

聽起來不錯,但我不知道你是否有與win7 64bit的更新問題我只有一個問題..Kockock與VS2010/2008在我的風7 64位木材,但安裝了VS的更新和沒有更多的問題..對不起聽說你的電腦不停地崩潰.. – MethodMan 2012-02-07 13:49:37