好的世界,我遇到了一些麻烦。不,这不是“作业”
我有一些代码需要做两件事:
1) 从数据库中读取艺术家列表
2) 找到该艺术家写的所有轨道并存储以备后用
我在做什么:
1) SELECT ArtistID FROM artists
给我我的艺术家名单。我在 List<string>
中构建它数据类型,使用 DataReader
等效果很好
2) SELECT count(*) as track_numbers from tracks WHERE ArtistID = @ArtistID
效果不是很好
我的问题:
如果我手动指定 ArtistID
,第二个 select 语句将会成功(即:SELECT count(*) as track_numbers FROM Tracks WHERE ArtistID = 0
有效)但如果我遍历我的列表,它将始终返回零结果。
我正在使用 Connector/Net 6.3.6、Visual Studio 2010(所有更新)、.NET 4.0 Client Profile、MySQL 社区服务器 5.5.9 x64,Windows 7 家庭高级版 x64
我试过:
- 使用字符串连接构建我的带有 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)
有什么建议吗?谢谢。
最佳答案
我认为您需要删除 cmd.Parameters.Add(param);
调用。这会在每次迭代中添加一个新参数。每次对现有参数设置参数值应该就足够了。
关于c# - DataReader 不返回任何行——行存在于数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5452872/