У меня возникла проблема сохранения результата запроса select в класс модели. Я новичок в MVC, так голый со мной, пожалуйста! :)Ошибка ввода нулей в Список объектов с использованием .net core mvc?
Я пытаюсь сопоставить значения, взятые из листа excel со значениями из локальной базы данных. Я продолжаю получать ошибку «Data is Null. Этот метод или свойство нельзя вызвать на значения Null» или что-то подобное. Я не думаю, что могу перейти в нуль, поскольку я запустил SQL-запрос, чтобы заменить все нули на 0. Мне также все равно, если null передан этим свойствам, поэтому либо сделать поля обнуляемыми, либо удалить нули работа ... Думаю?
Ниже мой код:
//initialize spreadsheet package,
//load excel file, create dictionary of
//naic/industry key/value pairs
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
ExcelFile ef = ExcelFile.Load("C:/Data Sources/NAICS sheets/3-Digit-NAICS-Codes.xls");
Dictionary<object, object> naics = new Dictionary<object, object>();
//Connection string for local MSSQL database
SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=gov_world;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");
//Create array of client objects returned from query
Client[] allRecords = null;
string sql = "SELECT v_company, client_pk, v_naic_1, v_naic_2, v_naic_3, v_naic_4, v_naic_5 FROM dbo._clients";
//Iterate through elements of excel sheet, eventually inputting first column value
//as key and second column value as value in dictionary
foreach (ExcelWorksheet sheet in ef.Worksheets)
{
foreach (ExcelRow row in sheet.Rows)
{
object[] industry = new object[2];
var count = 0;
//populate industry array with all values of row
foreach (ExcelCell cell in row.AllocatedCells)
{
if (cell.Value != null)
{
industry[count] = cell.Value;
}
count++;
}
count = 0;
//add values of first 2 cells to naics dictionary object
naics.Add(industry[0], industry[1]);
//Console.WriteLine(industry[0] + " | " + industry[1]);
//reinitialize for every record
industry[0] = 0;
industry[1] = 0;
}
}
//Set values from query to client model object, uses
//to populate allRecords Array
using (var command = new SqlCommand(sql, con))
{
con.Open();
using (var reader = command.ExecuteReader())
{
var list = new List<Client>();
while (reader.Read())
list.Add(new Client {
//Solution: write as v_company = reader[0] as string;
v_company = reader.GetString(0),
client_pk = reader.GetInt32(1),
v_naic_1 = reader.GetString(2),
v_naic_2 = reader.GetString(3),
v_naic_3 = reader.GetString(4),
v_naic_4 = reader.GetString(5),
v_naic_5 = reader.GetString(6)
});
allRecords = list.ToArray();
}
}
Console.WriteLine(allRecords[0].v_naic_1);
Console.ReadLine();
Я могу понять спичку, на данный момент я просто хочу «list.Add (новый клиент ...» работать так, чтобы петля, а завершает . заранее спасибо, дайте мне знать, если есть больше информации я могу предоставить, чтобы помочь
Вы должны использовать EF с MVC, но это не проблема, знаете ли вы, какая строка выдает ошибку? Или трассировать трассировку или что-нибудь еще? Также есть все ваши типы столбцов string/varchar? –
Да, они являются строками/varchar, за исключением id. Хотелось использовать EF, но просто скопировало вставляемый шаблонный код, потому что я немного спешу и не разбираюсь в нем. Строкой, которая вызывает ошибку, является «while (reader.read()) list.Add .... и т. Д.». Посмотрел трассировку стека, не уверен, как размещать соответствующий материал здесь. Приходит с пустым перечислимым набором после примерно 150 000 записей. –
«или что-то подобное» - почему бы не указать точное сообщение об ошибке для нас? Если у вас его нет, прямо сейчас запустите свою программу и запишите ее. Полное точное сообщение об ошибке вместе с тем, что его строка (и, возможно, полная трассировка стека), сделает отладку намного проще. Я предполагаю, что это, вероятно, дубликат http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it, но на данном этапе не может быть уверен без правильного сообщения об ошибке. – Chris