Проблемы с кодировкой ASP.NET Core & SQL Server - PullRequest
0 голосов
/ 18 мая 2018

У меня проблемы с русским языком в моей базе данных.Я читаю данные из файла xlsx.Для чтения я использую библиотеку OfficeOpenXml.При отладке проблем с кодировкой нет, но после добавления в базу есть только ???.Я не думаю, что проблема в кодировке базы данных.

[HttpPost]
public ActionResult Upload(IFormFile file)
{
        if (file == null || file.Length == 0)
        {
            ModelState.AddModelError("file", "Choose file!");
        }

        if (Path.GetExtension(file.FileName) != ".xlsx")
        {
            ModelState.AddModelError("file", "Choose .xlsx file!");
        }

        StringBuilder sbSql = new StringBuilder();

        sbSql.Append("set dateformat dmy;");
        sbSql.Append("DELETE FROM [CamcostDB].[dbo].[Items];");

        using (var xls = new ExcelPackage(file.OpenReadStream()))
        {
            using (var sheet = xls.Workbook.Worksheets["Export Products Sheet"])
            {
                for (int j = sheet.Dimension.Start.Row + 1; j <= sheet.Dimension.End.Row; j++)
                {
                    if (sheet.Cells[j, 1].Value == null)
                        sbSql.AppendFormat(@"INSERT INTO [CamcostDB].[dbo].[Items] ([Id],[About],[Price],[Title]) VALUES ('{0}', '{1}' , {2} , '{3}');", Guid.NewGuid(), GV(sheet, j, 4), GVDouble(sheet, j, 6), GV(sheet, j, 2));
                }
            }
        }

        using (var connection = new SqlConnection(Configuration.GetConnectionString("DefaultConnection")))
        {
            var command = new SqlCommand(sbSql.ToString(), connection);

            if (connection != null)
            {
                connection.Open();
            }

            int result = command.ExecuteNonQuery();
            connection.Close();
        }

        return Content("success");
    }

    private string GVDouble(ExcelWorksheet sheet, int rowNo, int cellNo)
    {
        return sheet.Cells[rowNo, cellNo].Value != null ? sheet.Cells[rowNo, cellNo].Value.ToString().Replace(',','.') : "0";
    }

    private string GV(ExcelWorksheet sheet, int rowNo, int cellNo)
    {
        return sheet.Cells[rowNo, cellNo].Value != null ? sheet.Cells[rowNo, cellNo].Value.ToString() : "";
    }
}

И вот что у меня есть:

only

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Решено путем изменения параметров сортировки базы данных на Cyrillic_General_CI_AS

0 голосов
/ 18 мая 2018

убедитесь, что ваши типы данных в строковых полях являются "n" версиями для строк.nChar, nvarchar, nText, чтобы вы не потеряли данные при работе с кодировками nonANSI

https://docs.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-2017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...