gpt4 book ai didi

c# - DataReader 不返回任何行——行存在于数据库中

转载 作者:可可西里 更新时间:2023-11-01 07:45:34 25 4
gpt4 key购买 nike

好的世界,我遇到了一些麻烦。不,这不是“作业”

我有一些代码需要做两件事:
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.6Visual Studio 2010(所有更新)、.NET 4.0 Client ProfileMySQL 社区服务器 5.5.9 x64Windows 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com