У меня есть приложение asp.net, в котором люди смогут вставлять английские, французские и японские данные в базу данных MS SQL. Я внесла необходимые изменения в БД, как имеющие поля как NVARCHAR, а также установил префикс «N» перед фактическим параметром (поскольку я использую хранимые процедуры).Сохранение японского текста в базу данных SQL
либо исправления, которые не работают, я мог бы делать что-то неправильно с префиксом, было бы замечательно, если вы можете помочь мне решить эту проблему :)
Параметры я использую ниже:
@RewardId INT = NULL,
@SupplierId INT = NULL,
@RewardCode NVARCHAR(50) = NULL,
@RewardDesc NVARCHAR(MAX) = NULL,
@RStartDate DATETIME = NULL,
@REndDate DATETIME = NULL,
@RStatus BIT = NULL,
@RCostPrice FLOAT = NULL,
@PDCost FLOAT = NULL,
@RStocks INT = NULL,
@RewardTypeId INT = NULL,
@RCategoryId INT = NULL,
@RProductDesc NVARCHAR(MAX) = NULL,
@RTermsCond NVARCHAR(MAX) = NULL,
@DMId INT = NULL,
@RRetailPrice FLOAT = NULL,
@TemplateId INT = NULL,
@RFreight FLOAT = NULL,
@RTotalCost FLOAT = NULL,
@MinimumQuantity INT = NULL,
@RewardImageURL nvarchar(500) = null,
@UpdateDate nvarchar(50) = null,
@Rpoints nvarchar(50) = null ,
@ExpiryDateSetup nvarchar(50),
@ExpiryNumberOfMonths nvarchar(50),
@minimumstockcount int = NULL,
@RewardRelationId int = null,
@ParentRewardCode nvarchar(50) =null,
@EstimatedSaving nvarchar(50) = null,
@IsAirMilesMonday bit = False,
@IsExpirymonthly bit = False,
@IsPromoCodeEnabled nvarchar(50) = null,
@IsLocked nvarchar(50) = null,
@IsCompetition nvarchar(50) = null,
@Sorting nvarchar(50) = null,
@Tier nvarchar(50) = null
путь я коплю данные ниже:
UPDATE
Rewards
SET
SupplierId = @SupplierId,
RewardCode = @RewardCode,
RewardDesc = 'N'[email protected],
RStartDate = @RStartDate,
REndDate = @REndDate,
RStatus = @RStatus,
RCostPrice = @RCostPrice,
RStocks = @RStocks,
RewardTypeId = @RewardTypeId,
RCategoryId = @RCategoryId,
RProductDesc = 'N'[email protected],
RTermsCond = 'N'[email protected],
RRetailPrice = @RRetailPrice,
PDCost = @PDCost,
RFreight = @RFreight,
TemplateId = @TemplateId,
RTotalCost = @RTotalCost,
DMId = @DMId,
MinimumQuantity = @MinimumQuantity,
RewardImageURL = @RewardImageURL,
UpdateDate = @UpdateDate,
Points = @Rpoints ,
ExpiryDateSetup = @ExpiryDateSetup,
ExpiryNumberOfMonths = @ExpiryNumberOfMonths,
MinimumStockCount = @minimumstockcount,
RewardRelationId = @RewardRelationId ,
ParentRewardCode = @ParentRewardCode ,
EstimatedSaving = @EstimatedSaving,
IsAirMilesMonday = @IsAirMilesMonday ,
IsExpirymonthly = @IsExpirymonthly,
IsPromoCodeEnabled = @IsPromoCodeEnabled,
Islocked = @IsLocked ,
IsCompetition = @IsCompetition ,
Sorting = @Sorting,
tier = @tier
WHERE
RewardId = @RewardId;
******** EDIT ***********
Кода, используемый для вызова SP определен ниже:
Public Function Save(ByVal us As String, ByRef obrewardsold As cls_Rewards, ByRef obrewardsnew As cls_Rewards) As Boolean
Dim sSQL As String
Dim rtn As Boolean
Dim rs As SqlDataReader = Nothing
Try
Save = True
sSQL = "exec Rewards_upd"
sSQL = sSQL & " @SupplierId=" & gFixQuotes(SupplierId)
sSQL = sSQL & ", @RewardId=" & gFixQuotes(RewardId)
sSQL = sSQL & " , @RewardCode=" & gFixQuotes(RewardCode)
sSQL = sSQL & ", @RewardDesc=" & gFixQuotes(RewardDesc)
sSQL = sSQL & ", @RStartDate=" & gFixQuotes(RStartDate)
sSQL = sSQL & ", @REndDate=" & gFixQuotes(REndDate)
sSQL = sSQL & ", @RStatus=" & gFixQuotes(RStatus)
sSQL = sSQL & ", @RCostPrice=" & gFixQuotes(RCostPrice)
sSQL = sSQL & ", @RRetailPrice=" & gFixQuotes(RRetailPrice)
sSQL = sSQL & " ,@RFreight=" & gFixQuotes(RFreight)
rtn = GetData(rs, sSQL)
Пожалуйста, прочтите следующее: http://dba.stackexchange.com/questions/90296/storing- japanese-characters-in-a-table – Lazcano
Собственно, вы * разбиваете * данные - если параметры Unicode, то есть nvarchar, вам не нужно ничего делать. Строка 'RewardDesc = 'N' + @ RewardDesc, хотя и объединяет строку ASCII, содержащую' N', с строковым параметром, таким образом преобразуя все в ASCII –
Вы можете использовать это как: ** N '' + @ RewardId + '' ** –