我很难理解为什么当我将一个项添加到我的字符串数组“internalDives”时,该方法退出并且没有显示调试错误。
拜托,我在这里做错了什么?
private void GridDataConnection()
{
using (SqlCeConnection conn = new SqlCeConnection(ConnectionString))
{
conn.Open();
using (SqlCeCommand command = new SqlCeCommand("SELECT id,divelocation,divedate,diveduration FROM loggeddives", conn))
{
SqlCeDataReader readDiveResult = command.ExecuteReader();
var diveList = new List<string[]>();
while (readDiveResult.Read())
{
string[] internalDives = new string[4];
internalDives[0] = readDiveResult.GetString(0);
internalDives[1] = readDiveResult.GetString(1);
internalDives[2] = readDiveResult.GetString(2);
internalDives[3] = readDiveResult.GetString(3);
diveList.Add(internalDives);
i++;
}
}
conn.Close();
}
}
答案 0 :(得分:2)
您确定所有列类型都是字符串吗? GetString不进行任何转换,并假设所有列都是string类型。我建议你使用try catch语句来捕获任何InvalidCastException
。
还检查所有值是否已实例化。您可以使用IsDBNull方法执行此操作。
答案 1 :(得分:0)
你应该做的第一件事就是抓住正在抛出的异常,就像mservidio在评论中提到的那样。
你很有可能在你做的时候发现你对GetString的一个调用抛出了一个IndexOutOfBoundsException,所以要准备好仔细检查你的代码并查看Read管道中的内容。它可能不是你的想法。
答案 2 :(得分:0)
我猜你的数据库中有空值,所以当你尝试读取其中一列时会出现错误:“Data is Null。无法在Null值上调用此方法或属性”。您必须调用IsDBNull方法来检查该值是否为null,然后读取该值。
试试这段代码
private void GridDataConnection()
{
using (SqlCeConnection conn = new SqlCeConnection(ConnectionString))
{
conn.Open();
using (SqlCeCommand command = new SqlCeCommand("SELECT id,divelocation,divedate,diveduration FROM loggeddives", conn))
{
SqlCeDataReader readDiveResult = command.ExecuteReader();
var diveList = new List<string[]>();
while (readDiveResult.Read())
{
string[] internalDives = new string[4];
internalDives[0] = readDiveResult.IsDBNull(0) ? "": readDiveResult.GetString(0);
internalDives[1] = readDiveResult.IsDBNull(1) ? "": readDiveResult.GetString(1);
internalDives[2] = readDiveResult.IsDBNull(2) ? "": readDiveResult.GetString(2);
internalDives[3] = readDiveResult.IsDBNull(3) ? "": readDiveResult.GetString(3);
diveList.Add(internalDives);
i++;
}
}
conn.Close();
}
}
答案 3 :(得分:0)
我通常在尝试将查询添加到数组或列表之前验证从查询返回的信息。快速检查以确认所有值都是字符串,甚至可以计算以验证有4个值。正如其他人提到的那样,尝试捕获非常有帮助。您还可以创建快速错误日志以将任何异常转储到临时文件中。
第一个答案是温柔的!