2017-04-08 37 views
1

我想用一個登錄系統做一個程序 我是新來的,但我一直在努力解決這個問題8個小時。 這是錯誤代碼,我得到系統。 InvalidOperationException

+ ServerVersion 'con.ServerVersion' threw an exception of type 'System.InvalidOperationException' string {System.InvalidOperationException} 

這裏是我的代碼

private void LogB_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection("Data Source=Myip;user id=MyId;database=MyDb;password=MyPw;persistsecurityinfo=True"); 
     SqlDataAdapter sda = new SqlDataAdapter("Select * From login where navn='"+ TULog.Text + "' and pw='" + TPLog.Text + "'",con); 

     try 
     { 

      con.Open(); 


     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.ToString()); 
      throw ex; 
     } 
     finally 
     { 
      con.Close(); 
     } 
    } 
} 
} 

很抱歉,如果這似乎是一些廢話,但我是誰試圖瞭解一個人:對

+0

你能否包含完整的異常細節? – EJoshuaS

+0

在con.Open之後(在try/catch中)移動適配器,表和填充行也搜索如何編寫參數化查詢 – Steve

+0

ServerVersion'con.ServerVersion'拋出了一個類型爲'System.InvalidOperationException'的字符串{System .InvalidOperationException} 非公共成員 「con.HasLocalTransaction」扔類型的異常「System.InvalidOperationException」 「con.HasLocalTransactionFromAPI」扔「System.InvalidOperationException」類型 –

回答

1

此異常告訴你在SqlConnection已關閉的情況下嘗試訪問con.ServerVersion財產。

從MSDN上SqlConnection.ServerVersion屬性:

出現InvalidOperationException - 連接關閉。 ServerVersion在返回的Task未完成時調用,並且在調用OpenAsync後未打開連接。

上面顯示的代碼不顯示對此屬性的調用,您必須在其他位置執行此操作。無論如何,連接需要在這樣做之前打開。

+0

像這樣的異常?這仍然不適合我 - 嘗試 { con.Open(); MessageBox.Show(「ServerVersion:」+ con.ServerVersion +「\ nState:」+ con.State.ToString()); } catch(SqlException ex) MessageBox.Show(ex.ToString());投擲前; } finally { con.Close(); } –

+0

@TheisJ在連接打開之前,您必須在別處引用此屬性。我建議你在調試器中單步執行你的程序,找出哪一行拋出異常。 – khargoosh

+0

@TheisJ你解決了這個問題嗎? – khargoosh