【发布时间】:2020-11-11 01:11:00
【问题描述】:
我正在上载 Excel 值并将其保存到数据库中。在将值保存到 db 时,我收到错误 Value cannot be null. (Parameter 's') 我猜这个问题可能与 EF 有关,但我仍然无法确定如何解决它。
如果excel没有空列,则excel将成功上传并保存到db。但是如果某些excel列是空的,我该如何处理呢?
有些列我可以清空,这就是为什么我必须让一些可以为空。
我不知道我做错了什么
ex.StackTrace:
at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.Int64.Parse(String s)
at LoanWarehouse.Controllers.AccountUploadController.<SaveCustomerUpload>d__14.MoveNext() in C:\Users\DELL\source....\Controllers\UploadController.cs:line 409
这是提取值并保存到数据库的方法
public async Task<Response> SaveCustomerUpload(int UploadId, ExcelWorksheet workSheet, int rowSize)
{
Response response = new Response();
response.IsSuccessful = true;
List<Customer> CustomerDatalist = new List<Customer>();
//skip first row for column header
for (int i = 2; i <= rowSize; i++)
{
try
{
CustomerDatalist.Add(new Customer
{
CustId = long.Parse(workSheet.Cells[i, 1].Value.ToString()),
FirstName_CompanyName = workSheet.Cells[i, 2].Value.ToString(),
MiddleName = workSheet.Cells[i, 3].Value.ToString(),
Gender = workSheet?.Cells[i, 4]?.Value?.ToString(),
FatherName = workSheet?.Cells[i, 5]?.Value?.ToString(),
MotherName = workSheet?.Cells[i, 6]?.Value?.ToString(),
DateOfBirth = null,
BVN = long.Parse(workSheet?.Cells[i, 8]?.Value?.ToString()),
EmailAddress = workSheet?.Cells[i, 9]?.Value?.ToString(),
OfficeNumber = workSheet?.Cells[i, 10]?.Value?.ToString(),
Nationality = workSheet?.Cells[i, 11]?.Value?.ToString(),
PlaceOfBirth = workSheet?.Cells[i, 12]?.Value?.ToString(),
MaritalStatus = workSheet?.Cells[i, 13]?.Value?.ToString(),
SpouseName = workSheet?.Cells[i, 14]?.Value?.ToString(),
TelephoneNo = workSheet?.Cells[i, 15]?.Value?.ToString(),
MobileNo = workSheet?.Cells[i, 16]?.Value?.ToString(),
Address = workSheet?.Cells[i, 17]?.Value?.ToString(),
OfficeEmailAddress = workSheet?.Cells[i, 18]?.Value?.ToString(),
FaxNumber = workSheet?.Cells[i, 19]?.Value?.ToString(),
WebsiteURL = workSheet?.Cells[i, 20]?.Value?.ToString(),
RelatedComapany = workSheet?.Cells[i, 21]?.Value?.ToString(),
LegalConstitution = workSheet?.Cells[i, 22]?.Value?.ToString(),
ShareHolder = workSheet?.Cells[i, 22]?.Value?.ToString(),
}
);
}
catch (Exception ex)
{
response.Message = ex.ToString();
response.IsSuccessful = false;
logger.Error(ex);
break;
}
}
if (response.IsSuccessful)
{
//save the details for this upload
await _context.Customer.AddRangeAsync(CustomerDatalist);
await _context.SaveChangesAsync();
}
else
{
//reverse the initial AccountUpload and delete the details
var CustomerUpload = await _context.Customer.FindAsync(UploadId);
_context.Customer.Remove(CustomerUpload);
await _context.SaveChangesAsync();
}
return response;
}
【问题讨论】:
-
我看到很多 Value?.toString() 和 Value.toString()。我建议调试它们,因为将 null 转换为字符串会引发异常。
-
有推荐的excel格式,有些栏位可能是空的,因为上传excel时有些信息可能不可用。我有一个方法在上传之前检查标题。
-
如果excel没有空列,则excel将成功上传并保存到db。但是如果某些excel列是空的,我该如何处理?
标签: c# sql-server excel entity-framework asp.net-core