2014-09-10 39 views
2

SELECT @gb FROM參數WHERE Form_Factor = @ ff我是新來的c#,它是我的第一個程序。 我想連接mysql服務器並運行查詢。 然後,我想把他的第一個查詢的結果和他們運行另一個查詢。 第一個查詢很好,第二個mysqldataread不起作用,我不明白爲什麼。 (我使用vs 2013)。在c上讀取兩個MySql查詢#

代碼:

myCommand.CommandText = "SELECT GB,Form_Factor FROM devices WHERE Serial_Number = @Sn"; 
myCommand.Parameters.AddWithValue("@Sn", Sn); 

connect.Open(); 

MySqlDataReader reader = myCommand.ExecuteReader(); 

if (reader.Read()) 
{ 
    textBox2.Text = reader["GB"].ToString(); 
    textBox3.Text = reader["Form_Factor"].ToString(); 
} 
reader.Close(); 
connect.Close(); 


string gb = textBox2.Text; 
string ff = textBox3.Text; 
MySqlCommand myCommand2 = connect.CreateCommand(); 
myCommand2.Parameters.AddWithValue("@gb", gb); 
myCommand2.Parameters.AddWithValue("@ff", ff); 
myCommand2.CommandText = "SELECT @gb FROM parameters WHERE Form_Factor [email protected] "; 

connect.Open(); 

MySqlDataReader reader2 = myCommand2.ExecuteReader(); 

reader2.Read(); 

if (reader2.Read()) 
{ 
    string command = reader2["@gb"].ToString(); 
    MessageBox.Show(command); 
} 

if (reader2.Read() == false) 
{ 
    MessageBox.Show("read failed!"); 
} 

reader2.Close(); 
connect.Close(); 
+1

您能否提供任何錯誤日誌記錄或進一步調試信息? 「Does not'工作」很難與 – 2014-09-10 09:39:15

+0

工作,如果(reader2.Read()== false),我得到了「讀取失敗!而不是MessageBox.Show(命令)。 – user2026 2014-09-10 09:47:21

回答

0

據我猜測@gb不是參數表中的現有字段,這就是爲什麼你不能在第二個查詢中得到任何結果。在使用sqlcommands時,同樣使用語句是一種很好的做法:

myCommand2.CommandText = "SELECT @gb FROM parameters WHERE Form_Factor [email protected] "; 
myCommand2.Parameters.AddWithValue("@gb", gb); 
myCommand2.Parameters.AddWithValue("@ff", ff); 
    using (connect) 
      { 
      connect.Open(); 
      MySqlDataReader reader2 = myCommand2.ExecuteReader(); 

       while (reader2.Read()) 
       { 
        string command = reader2[0].ToString(); 
        MessageBox.Show(command); 
       } 
      } 
+0

我在處理我的代碼時出錯了,這是命令:myCommand2.CommandText =「SELECT @gb FROM parameters WHERE Form_Factor = @ff;」; – user2026 2014-09-10 09:49:12

+0

@ user2026,我編輯過,可能會幫助 – apomene 2014-09-10 09:52:06

+0

謝謝,它是加工。 – user2026 2014-09-10 11:24:37

0

你需要閱讀更多herehere

不過,我編輯代碼:

myCommand.CommandText = "SELECT GB,Form_Factor FROM devices WHERE Serial_Number = @Sn"; 
myCommand.Parameters.AddWithValue("@Sn", Sn); 

connect.Open(); 

MySqlDataReader reader = myCommand.ExecuteReader(); 

if (reader.Read()) 
{ 
    textBox2.Text = reader["GB"].ToString(); 
    textBox3.Text = reader["Form_Factor"].ToString(); 
} 
reader.Close(); 
connect.Close(); 

string gb = textBox2.Text; 
string ff = textBox3.Text; 


myCOmmand.CommandText = @"SELECT * FROM parameters WHERE Form_Factor = 'Mercury';"; 

connect.Open(); 

MySqlDataReader reader2 = myCommand.ExecuteReader(); 

reader2.Read(); 

if (reader2.Read()) 
{ 
    string command = reader2["columnName"].ToString(); 
    MessageBox.Show(command); 
} 

if (reader2.Read() == false) 
{ 
    MessageBox.Show("read failed!"); 
} 

reader2.Close(); 
connect.Close(); 

確保編輯reader2 [ 「列名」]的ToString(); - >將columnName編輯到要獲取的columnName。

0

1 - 你不需要這行:

reader2.Read(); 

2日 - reader2["@gb"].ToString();是錯放的ColumnName你需要的,而不是"@gb"

3日 - AddWithValue毫無意義在這個秋天,你需要它只是如果你在你的SQL查詢一個動態變量

編輯 - 第二部分:

string gb = textBox2.Text; 
string ff = textBox3.Text; 
MySqlCommand myCommand2 = connect.CreateCommand(); 
myCommand2.CommandText = "SELECT " + gb + " FROM parameters WHERE Form_Factor = @ff;"; 
myCommand2.Parameters.AddWithValue("@ff", ff);  
connect.Open(); 
MySqlDataReader reader2 = myCommand2.ExecuteReader(); 

if (reader2.Read()) 
{ 
    string command = reader2[gb].ToString(); 
    MessageBox.Show(command); 
} 
else 
{ 
    MessageBox.Show("read failed!"); 
} 

reader2.Close(); 
connect.Close(); 
+0

我處理我的代碼時出錯。這是命令:myCommand2.CommandText =「SELECT @gb FROM parameters WHERE Form_Factor = @ff;」.gb和ff是第一個查詢結果。我想運行第二個查詢,他們和我不能 – user2026 2014-09-10 09:53:57

+0

我編輯過答案: – 2014-09-10 09:59:14