C# 尝试为数据库设定种子时索引超出范围
发生了什么:C# 尝试为数据库设定种子时索引超出范围,c#,entity-framework-6,httpwebrequest,httpwebresponse,C#,Entity Framework 6,Httpwebrequest,Httpwebresponse,发生了什么: string[] symbols = Resources.Fixed_lines.Split(' '); int stockId = 1; foreach(var symbol in symbols) { var stockData = GetStockDataFromSymbol(symbol); if (stockData != null) { var json = JObject.Parse(stockData);
string[] symbols = Resources.Fixed_lines.Split(' ');
int stockId = 1;
foreach(var symbol in symbols)
{
var stockData = GetStockDataFromSymbol(symbol);
if (stockData != null)
{
var json = JObject.Parse(stockData);
var stock = new Company()
{
StockId = stockId,
Name = json["datatable"]["data"][0][1].ToString(),
Description = json["datatable"]["data"][0][0].ToString(),
Symbol = symbol
};
_context.Stocks.Add(stock);
stockId++;
} else
{
continue;
}
}
_context.SaveChanges();
当我运行updatedatabase
时,我试图在数据库中植入公司详细信息。然而,由于某种原因,我无法理解,当我的Seed
helper方法的一个助手返回null
时,该方法中的代码似乎会忽略
我在做什么:
string[] symbols = Resources.Fixed_lines.Split(' ');
int stockId = 1;
foreach(var symbol in symbols)
{
var stockData = GetStockDataFromSymbol(symbol);
if (stockData != null)
{
var json = JObject.Parse(stockData);
var stock = new Company()
{
StockId = stockId,
Name = json["datatable"]["data"][0][1].ToString(),
Description = json["datatable"]["data"][0][0].ToString(),
Symbol = symbol
};
_context.Stocks.Add(stock);
stockId++;
} else
{
continue;
}
}
_context.SaveChanges();
想法相当简单:
使用一组标识符对文件进行迭代,并向API发送HttpWebRequest
,以使用标识符获取详细信息。然后解析对公司
对象的响应
但是,如果API中不存在一个标识符(如果Request.StatusCode!=HttpStatusCode.Ok
),我将返回null
。或者如果周围的try-catch
失败,我将返回null
应该注意,我知道列表中的第一个标识符返回一个非OK状态码强>
问题:
string[] symbols = Resources.Fixed_lines.Split(' ');
int stockId = 1;
foreach(var symbol in symbols)
{
var stockData = GetStockDataFromSymbol(symbol);
if (stockData != null)
{
var json = JObject.Parse(stockData);
var stock = new Company()
{
StockId = stockId,
Name = json["datatable"]["data"][0][1].ToString(),
Description = json["datatable"]["data"][0][0].ToString(),
Symbol = symbol
};
_context.Stocks.Add(stock);
stockId++;
} else
{
continue;
}
}
_context.SaveChanges();
调用代码(下面的第一个片段)中从未捕获到null
,因此它似乎在试图解析空的JObject
,这给了我以下错误消息:
索引超出范围。必须为非负数且小于
收藏。参数名称:索引
呼叫代码:
string[] symbols = Resources.Fixed_lines.Split(' ');
int stockId = 1;
foreach(var symbol in symbols)
{
var stockData = GetStockDataFromSymbol(symbol);
if (stockData != null)
{
var json = JObject.Parse(stockData);
var stock = new Company()
{
StockId = stockId,
Name = json["datatable"]["data"][0][1].ToString(),
Description = json["datatable"]["data"][0][0].ToString(),
Symbol = symbol
};
_context.Stocks.Add(stock);
stockId++;
} else
{
continue;
}
}
_context.SaveChanges();
HttpWebRequest
帮助程序:
private string GetStockDataFromSymbol(string symbol)
{
try
{
string url = string.Format("https://www.quandl.com/api/v3/datatables/ZACKS/CP.json?" +
"qopts.columns[]=comp_desc&qopts.columns[]=comp_name&ticker={0}" +
"&api_key=myApiKey", symbol);
Debug.WriteLine(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.
Create(url);
request.Method = "Get";
request.KeepAlive = true;
request.ContentType = "application/json";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode != HttpStatusCode.OK)
{
return null;
}
string responseBody = string.Empty;
using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
{
responseBody = sr.ReadToEnd();
}
return responseBody;
}
catch (Exception ex)
{
return null;
}
}
?不确定这是否真的对我有帮助。我似乎面临的问题更多的是,调用代码中似乎找不到null,即使它应该由被调用代码返回。您有一些硬编码索引,如
json[“datatable”][“data”][0][1]
。错误是,即使stockData
和json
都不为空,但您引用的索引之一不存在。在var stock=new Company()
上设置断点,并检查json
的值?不确定这是否真的对我有帮助。我似乎面临的问题更多的是,调用代码中似乎找不到null,即使它应该由被调用代码返回。您有一些硬编码索引,如json[“datatable”][“data”][0][1]
。错误是,即使stockData
和json
都不为空,但您引用的索引之一不存在。在var stock=new Company()
上设置断点,并检查json
的值。