Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Can';t在nvarchar列中存储其他语言数据_Asp.net_Sql Server_Nvarchar - Fatal编程技术网

Asp.net Can';t在nvarchar列中存储其他语言数据

Asp.net Can';t在nvarchar列中存储其他语言数据,asp.net,sql-server,nvarchar,Asp.net,Sql Server,Nvarchar,我正在使用SQLServer2008。 这是我的表定义 create table myTable (nid int identity(1,1),content nvarchar(max)); 当我执行这两个查询时 insert into myTable(content)values(N'हिंदी में परीक्षण'); update myTable set content=N'हिंदी में परीक्षण' where nid=1; 在表中插入/更新其他语言数据。我想在存储过程

我正在使用SQLServer2008。 这是我的表定义

create table myTable (nid int identity(1,1),content nvarchar(max));
当我执行这两个查询时

insert into myTable(content)values(N'हिंदी में परीक्षण');
update myTable set content=N'हिंदी में परीक्षण' where nid=1;
在表中插入/更新其他语言数据。我想在存储过程中也这样做。这是我的存储过程的定义

create proc myProc
@nid int,
@content nvarchar(max)
as
begin
  update myTable set content=@content where nid=@nid;
end
它只是不起作用,该列被更新为?????????????价值我该怎么办。我试着这么做

update myTable set content=N''+@content where nid=@nid;
但这并不奏效。请帮忙

我忘了告诉你一件事

exec myProc 1,N'हिंदी में परीक्षण'
这是可行的,当然是可行的。问题是我从一个asp.NETWeb应用程序发送数据,在这个应用程序中我使用了这种语法

public void myProcCall()
    {
        dbcommand = db.GetStoredProcCommand("myProc", nid, content);
        ds = db.ExecuteDataSet(dbcommand);
    }
因此,当我从web应用程序发送其他语言内容时,该值将更新为??????????。我是否必须对我的asp.net代码进行一些更改。

这将起作用

EXEC myProc 1, N'हिं में पदी रीक्षण'
这不会

EXEC myProc 1, 'हिं में पदी रीक्षण'
因此,参数以非unicode的形式发送


您需要确保填充参数的代码发送unicode,您可以存储任何语言。您可以存储任何UTF16字符。但是MySQL没有nvarchar。如果无法使其在SQL Server中工作,那是因为未发送Unicode字符串或字段不是Unicode。无论加载的文本是什么,stringShow都会显示调用proc.BTW
nvarchar(max)
的代码是针对可以增长到2GB的blob的,而不是普通的textPost调用存储过程的代码。这就是将Unicode转换为ASCII并破坏数据的原因
updatemytable set content=N'+@content,其中nid=@nid是没有意义的。首先,它在一个空字符串前面加上前缀。第二个
N'whatever'
用于字符串文本。
nvarchar
参数已知为nvarchar,它不需要任何前缀。无论调用什么,存储过程都会在文本到达服务器之前损坏文本