2011-05-31 70 views
2

我無法理解我在做什麼錯誤,我似乎無法使用預準備語句進行SELECT。不過,我可以插入一個準備好的聲明。在.Net中編寫的SELECT語句

MySqlCommand cmd = new MySqlCommand("SELECT * FROM code_post WHERE name = ?postRequired LIMIT 1", dbcon); 
cmd.Parameters.Add(new MySqlParameter("?postRequired", requestString)); 
cmd.ExecuteNonQuery(); 

DataSet ds = new DataSet(); 
cmd.fill(ds, "result"); 
try { 
      thisBlog = ds.Tables["result"].Rows[0]; 
} catch { 
      invalid(); 
      return; 
} 

任何意見,將不勝感激!

+0

我不知道這是否與此事有關,但根據文檔(http://dev.mysql.com/doc/refman/5.1/en/connector-net-programming-prepared.html),它看起來像準備好的語句中的變量應該以'@'爲前綴,而不是'?'。 – Alxandr 2011-05-31 21:16:09

+0

我讀過,你必須使用@準備好的語句,而不是?因爲它造成兼容性問題。我現在不確定! – AlanFoster 2011-05-31 21:25:58

回答

5

要填充DataSet,您需要一個DataAdapter。

試試這個:

MySqlCommand cmd = new MySqlCommand("SELECT * FROM code_post WHERE name = ?postRequired LIMIT 1", dbcon); 
cmd.Parameters.Add(new MySqlParameter("?postRequired", requestString)); 
cmd.ExecuteNonQuery(); 

DataSet ds = new DataSet(); 
MySqlDataAdapter dAdap = new MySqlDataAdapter(); 
dAdap.SelectCommand = cmd; 
dAdap.Fill(ds, "result"); 
try { 
      thisBlog = ds.Tables["result"].Rows[0]; 
} catch { 
      invalid(); 
      return; 
} 
+0

這是我正在尋找的答案,非常感謝。是否需要做try/catch?我可以用if/else來檢查td表的行嗎? – AlanFoster 2011-05-31 21:19:10

+1

使用try catch ... depends ..但是給定你的代碼,你總是可以檢查ds.Tables [「result」] .Rows.Count> 0 – Chandu 2011-05-31 21:26:25

3

您需要使用SqlDataAdapter

DataAdapter表示一組數據命令和用於填充DataSet和更新SQL Server數據庫的數據庫連接。

SqlDataAdapter通過映射Fill這橋,這改變了DataSet中的數據在數據源中的數據匹配

檢查語法如下:

private static DataSet SelectRows(DataSet dataset, 
    string connectionString,string queryString) 
{ 
    using (SqlConnection connection = 
     new SqlConnection(connectionString)) 
    { 
     SqlDataAdapter adapter = new SqlDataAdapter(); 
     adapter.SelectCommand = new SqlCommand(
      queryString, connection); 
     adapter.Fill(dataset); 
     return dataset; 
    } 
} 
+1

+1 for use!始終使用使用! – n8wrl 2011-05-31 21:23:03