2016-06-13 64 views
-1

我的代碼下面的部分是工作完全正常,直到我重新啓動我的電腦,現在它給我ArgumentException的錯誤是未處理的,出現此錯誤:的ArgumentException未處理

An unhandled exception of type 'System.ArgumentException' occurred in System.Data.dll

Additional information: Invalid value for key 'integrated security'

{ 
    SqlConnection con = new SqlConnection(@"Data Source=M2192822\SHIFTREPORTS;Initial Catalog=ShiftReports;Integrated Security=ture"); 
    SqlDataAdapter sda = new SqlDataAdapter("Select Count(*) From [All of Production] where Tool ='" + MoldText.Text + "' and [Internal Part Number] ='" + IPNText.Text + "'", con); 
    DataTable dta = new DataTable(); 
    sda.Fill(dta); 
    MessageBox.Show("Part or Mold Number is Incorrect"); 
} 

if (dta.Rows[0][0].ToString() != "1") 
+3

true not ture .. – Ian

回答

3

由於錯誤消息說,ture對於Integrated Security不是有效值。您應該使用Integrated Security=true

該代碼還有其他更嚴重的問題。首先,連接沒有關閉。其次,您正在使用字符串連接創建一條SQL語句,這是將自己暴露給SQL注入攻擊的一種可靠方法。試想一下,如果用戶輸入1';drop table Products;--

正確關閉連接,並使用參數化查詢實際上比字符串連接更加容易會發生什麼:

var connString = @"Data Source=M2192822\SHIFTREPORTS;Initial Catalog=ShiftReports;Integrated Security=true"; 
var query="Select Count(*) From [All of Production] where Tool = @tool and [Internal Part Number] = @part"; 
DataTable dta = new DataTable(); 

using(var con = new new SqlConnection(connString)) 
using(var sda=new SqlDataAdapter(query, con) 
{ 
    var cmdParameters=sda.SelectCommand.Parameters; 
    parameters.AddWithValue("@tool",MoldText.Text); 
    parameters.AddWithValue("@part",IPNText.Text); 
    sda.Fill(dta); 
} 

您可以在應用程序的設置連接字符串存儲爲一個參數鍵入Connection String以避免硬編碼連接字符串。這將允許您訪問連接字符串使用設置名稱

+0

它說,它不能將查詢從'字符串'轉換爲'System.Data.SqlClient.SqlCommand' – Carlos

+0

糟糕,忘了添加連接參數 –

+0

好的但是這樣做它將允許用戶輸入他們想要的任何工具或零件號碼,並且當輸入的數據對任何一個不正確時我希望它出錯。 – Carlos