Объект не может быть создан на Win7 x64 - PullRequest
0 голосов
/ 10 января 2012

Я немного искал и ничего полезного не нашел, вот и я.

Я написал приложение на C # (любой параметр ЦП), которое работало на Windows 7 и XP x86 для некоторыхвремя без ошибок.

Недавно мой офис обновил мою рабочую станцию ​​до Windows 7 x64 (с x86).

Когда я запускаю свое приложение в Visual Studio 2010, я не получаю ошибок при запуске или компиляциивремя.Он работает как задумано.

Моя версия VS2010 - 10.0.30319.1 RTMRel из нашей подписки MSDN, Framework - 4.0.30319 RTMRel

Когда я запускаю свое скомпилированное приложение напрямую, я получаю ошибку, когда сSqlConnection объект.Не имеет значения, если я выбираю ЛЮБОЙ ЦП или 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 или Configuration Manager, и он действительно выдает строку 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 без каких-либо дополнений.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 10 января 2012

как определяется строка подключения в вашем файле .config для начинающих ..? нужно было бы увидеть столько

также я бы посмотрел на определение вашего sqlConn следующим образом

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

Во-вторых, я бы использовал Try catch {}, а также поместил использование () {} в эту попытку

если вы не хотите распоряжаться этим sqlConn .., тогда сделайте его статическим свойством

public static SQLConnection sqlConn = null;

тогда, если вам нужно его использовать .. используйте новую конструкцию внутри using () {}, как описано выше .. посмотрите также и эту ссылку, если хотите перечислить переменные строки подключения, используя исходную конструкцию ConfigurationSetting и manager

0 голосов
/ 10 января 2012

Чтобы проверить функциональность, я бы протестировал такой фрагмент кода.В вашем текущем коде есть ошибка в логике расположения, которая просто усложняет вещи

...