2016-02-28 50 views
1

我想在顯示SQL數據庫中的列的靜態方法中使用文本框中的文本。我怎樣才能做到這一點?如果我下面執行我的代碼,我有這樣的錯誤:c#非靜態方法需要對象引用

An object reference is required for the non-static method.

這是我的靜態方法:

static void OnTagsReported(ImpinjReader sender, TagReport report) 
     { 

     SqlConnection Cn; 
     SqlCommand Cmd; 
     //SqlCommand Cmd1; 

     Cn = new SqlConnection(@"Data Source=DESKTOP- ODCFVR1\SQLEXPRESS;Initial Catalog=RFID;Integrated Security=True"); 
     Cn.Open(); 

     // This event handler is called asynchronously 
     // when tag reports are available. 
     // Loop through each tag in the report 
     // and print the data. 
     foreach (Tag tag in report) 
     { 

      MessageBox.Show ("voici l'antenne :"+ tag.AntennaPortNumber +", EPC :"+ tag.Epc); 

      Cmd = new SqlCommand ("INSERT INTO EPC (Epc_CODE) values('" + tag.Epc + "')", Cn); 
      Cmd.ExecuteNonQuery(); 
      SqlCommand Cmd1 = new SqlCommand(); 
      Cmd1.CommandText = " select * from Epc Where EPC_code = '" +  tag.Epc + "' "; 
      Cmd1.Connection = Cn; 
      String result = " "; 
      Cmd1.ExecuteNonQuery(); 
      result = Cmd1.ExecuteScalar().ToString(); 
      textBox5.Text = result; // here is my problem 


      Cn.Close(); 
     } 

} 

謝謝!

+5

**警告**您的代碼極易遭受SQL注入攻擊。 –

+1

'textBox5'似乎是一個實例成員。從你的方法中刪除靜態。 –

回答

3

您正在靜態方法中引用實例成員。你既可以:

  • return Cmd1.ExecuteScalar().ToString();並設置呼叫methdo文本框中的文本
  • 或傳遞一個Action<string>委託其設置文本框的文本
  • 讓你的方法的實例方法(刪除static修改)

由於您的方法看起來像某種事件處理程序,我不會使它成爲靜態的。

摘要:您必須刪除對非靜態成員(文本框)的訪問或使您的方法非靜態。

+0

如果我讓我的方法非靜態的,我可以執行我的代碼沒有錯誤,但沒有出現在文本框文本中。否則我是一個初學者在C#@ventiseis你能展示我怎麼能應用前兩種方法之一。 –

+0

你的問題不是靜態方法。你的事件很簡單,沒有被調用 - 所以設置的東西似乎是錯誤的。我會建議你提供一個匹配的問題標題並提供更多的細節(你使用的是什麼框架,涉及哪些硬件)。 *否則,你將不會得到有用的答案。*我們無法猜測你的環境。 – ventiseis

相關問題