好的世界,我遇到了一些麻煩。不,這不是「功課」DataReader不返回行 - 數據庫中存在行
我有一些代碼,需要做兩件事情:
1)從數據庫
2閱讀藝術家列表)查找該藝術家和存儲寫入所有曲目它爲後來
我在做什麼:
1)SELECT ArtistID FROM artists
讓我的藝術家名單。我建立起來的List<string>
數據類型,使用DataReader
等偉大工程
2)SELECT count(*) as track_numbers from tracks WHERE ArtistID = @ArtistID
不起作用那麼大
我的問題:
第二個SELECT語句會成功,如果我手動指定ArtistID
(即:SELECT count(*) as track_numbers FROM Tracks WHERE ArtistID = 0
工程),但如果我遍歷我的列表,它將始終返回零結果。
我使用連接器/淨6.3.6,的Visual Studio 2010(所有更新),.NET 4.0客戶端配置文件,MySQL社區服務器5.5.9 64,Windows 7家庭高級版64位
我曾嘗試:
- 使用字符串連接來建立我的查詢字符串與artistid
- 鑄造artistid作爲一個字符串,然後一個int,則反之亦然
- 重新佈置,其中各參數的定義,放於值,該命令文本
相關(我認爲)以下代碼:
List<string> list = new List<string>();
Hashtable table = new Hashtable();
DbProviderFactory factory = DbProviderFactories.GetFactory(setting.ProviderName);
using (DbConnection conn = factory.CreateConnection())
{
conn.ConnectionString = setting.ConnectionString;
conn.Open();
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT ArtistID FROM artists;";
using (DbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
list.Add(reader["ArtistID"].ToString()); //this works, and I can iterate no problem through this list
}
}
}
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT count(*) as counts FROM tracks WHERE ArtistID = @ArtistID;";
//cmd.CommandText = "SELECT count(*) as counts FROM tracks WHERE ArtistID = 0;"; <-- this line works
DbParameter param = cmd.CreateParameter();
param.ParameterName = "@ArtistID";
foreach (string artist in list)
{
param.Value = artist;
cmd.Parameters.Add(param);
using (DbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(artist + "\t" + reader["counts"]); //reader["counts"] is always '0'
}
cmd.Parameters.Clear();
}
}
}
}
數據庫表的格式是: 藝術家具有一個值/鍵稱爲ArtistID
,類型int
首 曲目有三列,TrackID (int, pk)
,artistid (int)
,albumid(int)
有什麼建議?謝謝。
您可以在啓動循環之前檢查'HasRows'屬性嗎?並查看數據源中的檢索是否實際工作或出錯。 – 2011-03-27 22:27:00