我正在使用.Net的一个定制库来访问sql server。
此库在服务器中执行此查询:
exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2)
VALUES (@const795, @const796) ', N'@const795 int, @const796 nvarchar(50)',
@const795=1803496, @const796='ÄÅÉæÆôöòÇ Münchenß дие Таль'结果:
Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß ??? ????如果我手动执行此查询:
INSERT INTO Testable (testcolumn1, testcolumn2)
VALUES (1803496,N'ÄÅÉæÆôöòÇ Münchenß дие Таль')结果:
Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß дие Таль在UniCode编码中N'INSERT INTO不应该存储参数吗?为什么第二个查询保存“диеТаль”是好的,而第一个查询不是?
列2是nvarchar类型,列的排序规则是Latin1_General_CI_AS。
另一方面,我还有另一个问题,因为这个库实际上是在发送:
exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2)
VALUES (@const795, @const796) ',N'@const795 int,@const796 nvarchar(50)',
@const795=1803496, @const796= 'ÄÅÉæÆôöòÇ Münchenß ??? ????'用问号而不是俄文字符。我之所以知道这一点,是因为我使用过SQL分析器来“嗅探”来自库的查询。
从库中调试查询我可以看到这个“диеТаль”字符的正确值,直到将查询发送到数据库。但是sql分析器得到“?”字符·为什么会发生这种情况?
发布于 2014-05-13 23:02:12
当您将@const796设置为某个值时,库需要指定"N“。@const796=N'ÄÅÉæÆôöòÇ Münchenß дие Таль'
exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2)
VALUES (@const795, @const796) ', N'@const795 int, @const796 nvarchar(50)',
@const795=1803496, @const796=N'ÄÅÉæÆôöòÇ Münchenß дие Таль'https://stackoverflow.com/questions/23634816
复制相似问题