Формат юникода, прежде чем получить из базы данных - PullRequest
0 голосов
/ 15 мая 2019

Я создаю обзор данных со столбцом Unicode, например:

  private void GetUnicodeFormat()
        {
            string unicodeString = "\u2605";

            OneStar = unicodeString;
            TwoStar = unicodeString + unicodeString;
            ThreeStar = unicodeString + unicodeString + unicodeString;
            FourStar = unicodeString + unicodeString + unicodeString + unicodeString;
            FiveStar = unicodeString + unicodeString + unicodeString + unicodeString + unicodeString;
        }

Затем я установил его в datagridview, как:

  foreach (DataGridViewRow row in dgvProjectRanking.Rows)
            {
                var cellNumberValue = int.Parse(row.Cells[contractedColumnIndex].Value.ToString());

                if (cellNumberValue <= 20)
                {
                    row.Cells[scoreColumnIndex].Value = OneStar;
                }
                else if (cellNumberValue > 20 && cellNumberValue < 40)
                {
                    row.Cells[scoreColumnIndex].Value = TwoStar;
                }
                else if (cellNumberValue >= 40 && cellNumberValue < 60)
                {
                    row.Cells[scoreColumnIndex].Value = ThreeStar;

                }
                else if (cellNumberValue >= 60 && cellNumberValue < 80)
                {
                    row.Cells[scoreColumnIndex].Value = FourStar;
                }
                else if (cellNumberValue >= 80 && cellNumberValue <= 100)
                {
                    row.Cells[scoreColumnIndex].Value = FiveStar;

                }

            }

Это работает, я получаю звезды в DataGridView. Но теперь вместо этого я хочу отправить значения через SQL, поэтому я создаю функцию в sql:

CREATE FUNCTION [HELPER].[udf_ProjectContractedPercentage_Set]
(
             @ProjectContractedPercentage INT
)
RETURNS VARCHAR(MAX)
AS
        BEGIN
            DECLARE @NewProjectContractedPercentage VARCHAR(MAX)
                    ,@StarUnicode  VARCHAR(10) = '\u2605';
          SELECT
             @NewProjectContractedPercentage = (CASE
                                                WHEN @ProjectContractedPercentage <= 20
                                                THEN @StarUnicode
                                                WHEN @ProjectContractedPercentage > 20
                                                    AND @ProjectContractedPercentage < 40
                                                THEN CONCAT(@StarUnicode , @StarUnicode)
                                                WHEN @ProjectContractedPercentage >= 40
                                                    AND @ProjectContractedPercentage < 60
                                                THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode)
                                                WHEN @ProjectContractedPercentage >= 60
                                                    AND @ProjectContractedPercentage < 80
                                                THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode )
                                                WHEN @ProjectContractedPercentage >= 80
                                                    AND @ProjectContractedPercentage <= 100
                                                THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode)
                                            END)


            RETURN
            @NewProjectContractedPercentage

        END

Итак, я получаю такие значения, как:

enter image description here

Что мне нужно сделать в c # для преобразования этого значения в звезды? Я не знаю, в чем разница, если у меня есть значение Юникода в коде c # или получение из хранимой процедуры. Я думаю, что это точно так же, но не работает, поэтому я понятия не имею, почему бы и нет. Помощь очень ценится!

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Вам нужны две вещи.1. использовать NVARCHAR, потому что вы используете Unicode.2. Функция NCHAR, которая преобразует коды в символы.

Поэтому вместо @StarUnicode VARCHAR(10) = '\u2605';

Используйте: @StarUnicode NVARCHAR(10) = NCHAR(0x2605);

1 голос
/ 15 мая 2019

Нижеследующее изменение должно работать.Я тестировал его на SQL 2017.

Символ (звезда), с которым вы работаете, является символом Unicode.При работе с символами Юникода вы должны использовать NCHAR и NVARCHAR.

ALTER FUNCTION [HELPER].[udf_ProjectContractedPercentage_Set]
(
             @ProjectContractedPercentage INT
)
RETURNS NVARCHAR(MAX)
AS
        BEGIN
            DECLARE @NewProjectContractedPercentage NVARCHAR(MAX)
                    ,@StarUnicode  NCHAR(1) = NCHAR(9733);

          SELECT
             @NewProjectContractedPercentage = (CASE
                                                WHEN @ProjectContractedPercentage <= 20
                                                THEN @StarUnicode
                                                WHEN @ProjectContractedPercentage > 20
                                                    AND @ProjectContractedPercentage < 40
                                                THEN CONCAT(@StarUnicode , @StarUnicode)
                                                WHEN @ProjectContractedPercentage >= 40
                                                    AND @ProjectContractedPercentage < 60
                                                THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode)
                                                WHEN @ProjectContractedPercentage >= 60
                                                    AND @ProjectContractedPercentage < 80
                                                THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode )
                                                WHEN @ProjectContractedPercentage >= 80
                                                    AND @ProjectContractedPercentage <= 100
                                                THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode)
                                            END)


            RETURN
            @NewProjectContractedPercentage

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