![](/img/trans.png)
[英]Exported XML file from Database and get clean format without any attributes before actual columns
[英]Format unicode before get from database
我用unicode列创建datagridview:
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
所以我收到像这样的值:
我需要在c#中执行什么操作才能将该值转换为星号?,如果我在c#代码中具有unicode值或从存储过程中接收到unicode值,我不知道有什么区别。 我认为这是完全一样的,但是没有用,所以我不知道为什么不这样做。 帮助非常感谢!
您需要两件事。 1.使用NVARCHAR,因为您正在使用Unicode。 2. NCHAR功能,可将代码转换为字符。
因此,而不是@StarUnicode VARCHAR(10) = '\★';
使用: @StarUnicode NVARCHAR(10) = NCHAR(0x2605);
以下更改应该起作用。 我在SQL 2017上进行了测试。
您正在使用的字符(星号)是Unicode字符。 使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.