C# 集合未从 SQL 查询接收数据
C# Collection not receiving data from SQL Query
我一直在尝试用 SQL 查询中的数据填充一个集合,但它似乎没有用,我也不确定为什么。我已经确认连接字符串是好的,并且我有充分的理由相信查询本身正在返回结果,但 List 集合不想填充。代码编译和运行没有错误,但是,就像我说的,我的列表中没有数据。 :/(注意:table 中唯一的数据是整数和变量)。
非常感谢任何帮助!
//create collection to dump SQL Query date into
List<String> creatureStats = new List<String>();
//Setup connection String to local DB
string connectionString = WindowsFormsApplication1.Properties.Settings.Default.CreaturesConnectionString;
//Open connection to db and run SQL Query
using (SqlConnection db = new SqlConnection(connectionString))
{
string query = "SELECT * FROM Creatures WHERE CreatureName = @creatureName;";
using (SqlCommand command = new SqlCommand(query, db))
{
//pass Creature name
command.Parameters.AddWithValue("@creatureName", creatureName);
db.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
for (int i = 0; i <= reader.FieldCount; i++)
{
while (reader.Read())
{
if (!reader.IsDBNull(i))
{
if (reader.GetDataTypeName(i) == "int")
creatureStats.Add(creatureStats[i] = Convert.ToString(reader.GetInt32(i)));
else
creatureStats.Add(creatureStats[i] = reader.GetString(i));
}
else
creatureStats.Add(creatureStats[i] = string.Empty);
}
}
}
}
}
打开连接后:
db.Open();
你必须这样写:
command.ExecuteNonQuery();
您的循环被破坏且不正确。
while (reader.Read())
必须是外循环
for (int i = 0; i <= reader.FieldCount; i++)
必须是内循环
因为 reader.read 从数据库中读取整条记录的下一条记录。
所以你需要这样的东西
while (reader.Read()){
for (int i = 0; i <= reader.FieldCount; i++){
}
}
现在对于内部循环,您的代码很奇怪:
creatureStats.Add(creatureStats[i] = string.Empty);
creatureStats.Add(creatureStats[i] = reader.GetString(i));
creatureStats.Add(creatureStats[i] = Convert.ToString(reader.GetInt32(i)));
这些语句应该做什么?即使这有效,代码也不清楚,并且会向阅读它的人提出问题。把它分成两行。
我还没有对此做任何事情,因为我不能站在你的立场上去了解你对这句话的意图。
在我看来,你改变了一个数组元素,同时再次添加它。我不明白这个有什么用。
creatureStats.Add(string.Empty);
creatureStats.Add(reader.GetString(i));
creatureStats.Add(Convert.ToString(reader.GetInt32(i)));
可能是你的意图。
我一直在尝试用 SQL 查询中的数据填充一个集合,但它似乎没有用,我也不确定为什么。我已经确认连接字符串是好的,并且我有充分的理由相信查询本身正在返回结果,但 List 集合不想填充。代码编译和运行没有错误,但是,就像我说的,我的列表中没有数据。 :/(注意:table 中唯一的数据是整数和变量)。 非常感谢任何帮助!
//create collection to dump SQL Query date into
List<String> creatureStats = new List<String>();
//Setup connection String to local DB
string connectionString = WindowsFormsApplication1.Properties.Settings.Default.CreaturesConnectionString;
//Open connection to db and run SQL Query
using (SqlConnection db = new SqlConnection(connectionString))
{
string query = "SELECT * FROM Creatures WHERE CreatureName = @creatureName;";
using (SqlCommand command = new SqlCommand(query, db))
{
//pass Creature name
command.Parameters.AddWithValue("@creatureName", creatureName);
db.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
for (int i = 0; i <= reader.FieldCount; i++)
{
while (reader.Read())
{
if (!reader.IsDBNull(i))
{
if (reader.GetDataTypeName(i) == "int")
creatureStats.Add(creatureStats[i] = Convert.ToString(reader.GetInt32(i)));
else
creatureStats.Add(creatureStats[i] = reader.GetString(i));
}
else
creatureStats.Add(creatureStats[i] = string.Empty);
}
}
}
}
}
打开连接后:
db.Open();
你必须这样写:
command.ExecuteNonQuery();
您的循环被破坏且不正确。
while (reader.Read())
必须是外循环
for (int i = 0; i <= reader.FieldCount; i++)
必须是内循环 因为 reader.read 从数据库中读取整条记录的下一条记录。
所以你需要这样的东西
while (reader.Read()){
for (int i = 0; i <= reader.FieldCount; i++){
}
}
现在对于内部循环,您的代码很奇怪:
creatureStats.Add(creatureStats[i] = string.Empty);
creatureStats.Add(creatureStats[i] = reader.GetString(i));
creatureStats.Add(creatureStats[i] = Convert.ToString(reader.GetInt32(i)));
这些语句应该做什么?即使这有效,代码也不清楚,并且会向阅读它的人提出问题。把它分成两行。 我还没有对此做任何事情,因为我不能站在你的立场上去了解你对这句话的意图。 在我看来,你改变了一个数组元素,同时再次添加它。我不明白这个有什么用。
creatureStats.Add(string.Empty);
creatureStats.Add(reader.GetString(i));
creatureStats.Add(Convert.ToString(reader.GetInt32(i)));
可能是你的意图。