Searching Japanese text does not work
-
Thursday, June 07, 2012 11:25 PM
I have a user table that stores names in English and Japanese. The web application layers use the following technologies
ASP.Net <----> EF 4 <----> SQL Server 2008
EF4 does not to return any data when searching for Japanese names. Stored procedures are being employed for data retrieval operations. All the stored procedure parameters are of nvarchar type and the data is stored in the tables as nvarchar type as well.
All Replies
-
Thursday, June 07, 2012 11:34 PMModerator
Have you tested running these stored procedures with the correct parameter directly in SSMS first? Does it work there?
Have you captured the exact command sent by your application to SQL Server using SQL Server Profiler?
For every expert, there is an equal and opposite expert. - Becker's Law
My blog -
Thursday, June 07, 2012 11:38 PM
Stored procedures work fine in SSMS
exec sp_search_user N'Japanese text', N'Japanese Text'
<<<< Have you captured the exact command sent by your application to SQL Server using SQL Server Profiler? >>>>
I will try this next.
Thanks,
-
Thursday, June 07, 2012 11:41 PMModeratorI suspect that you're calling the parameter as varchar (not nvarchar) from your application. Check if N' is present in the command.
For every expert, there is an equal and opposite expert. - Becker's Law
My blog -
Friday, June 08, 2012 12:26 AM
Yes you can capture the exact command sent by your application to SQL Server using SQL Server Profiler
With Thanks and Regards
Sambath Raj.C
click "Proposed As Answer by" if this post solves your problem or "Vote As Helpful" if a post has been useful to you -
Friday, June 08, 2012 2:43 AM
Couple of things to make sure that non-english text are safe with MSSQL
- column datatype as NVARCHAR
- insert into database with proper unicode entry [the insert ASP.Net page should use UTF-8 encoding]
- use N' with query text
Thanks,
-
Friday, June 08, 2012 3:52 PM
Here is what I got from SQL Profiler:
exec sp_search_user '??', '??'
the Japanese text got replaced with ??
Adding the following @ Page directive had no impact on the outcome:
<%@ Page RequestEncoding="utf-8" ResponseEncoding="utf-8" %>
-
Friday, June 08, 2012 4:03 PMModeratorYou need to dig deeper in the code now and find out why it's not using named parameters, for example. BTW, sp_search is a bad name for a stored procedure as sp_ prefix is reserved for the system stored procedures. spSearch is a better name.
For every expert, there is an equal and opposite expert. - Becker's Law
My blog -
Friday, June 08, 2012 4:08 PM
The SQL that I have posted above is generated by EF4. The stored procedure is called from a function import.
<<< BTW, sp_search is a bad name for a stored procedure >>>
Good observation but I have only used "sp_search_user" as an example to illustrate the problem :)
-
Friday, June 08, 2012 5:42 PMModerator
I see - well, that generated code is no good. You may ask this question in the Entity Framework forum now as why such command was generated.
If you do, please post a link here.
Good luck in finding the root of the problem.
For every expert, there is an equal and opposite expert. - Becker's Law
My blog -
Friday, June 08, 2012 6:22 PMModerator
I am by no means a .net guru, but does the application server have the language pack installed to understand the japanese character set? If it is working on the database instance, the problem has to be with the application.
-
Friday, June 08, 2012 6:25 PMModerator
According to this article a ? is used when the correct code page is not used. http://support.microsoft.com/kb/893663
Codepage conversion issues
When a character is replaced by a question mark (?) character, this is an indication that a codepage conversion issue, has occurred. The question mark (?) is a default character for the codepage conversion and basically means that the operating system does not know how to handle the character value and convert it. It replaces the character value with a question mark (?). This could mean that the character has an invalid value for the codepage or that the codepage that is needed for the conversion is not installed. -
Friday, June 08, 2012 8:52 PM
I have also posted this question in the ADO.Net & EF forum:
http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/373d16c8-d8ec-4065-bebf-f595a66ded04I have verified that East Asian Language pack was indeed installed in the application server. The application is able to send the data intact to the DAL. The message is getting lost in transit between EF and the stored procedure call in the database.
-
Friday, June 08, 2012 10:18 PM
-
Saturday, June 09, 2012 9:54 AM
There could be a flaw inside the edmx definition about nvarchar and varchar.
How we can verify is, firstly make sure your stored procedure in SQL is accepting input parameter as nvarchar.
Then try to remove all the function definition and stored procedure from edmx and update edmx again to include the stored procedure and function.
Or you know what you are doing mode....
Right click edmx >> Open with >> choose XML editor, then look for stored procedure name in function tag and check the parameter type there.
<Function Name="Your SP Name" ... ... ... > <Parameter Name="Para Name" Type="nvarchar" Mode="In" /> </Function>
- Marked As Answer by CavemansIgloo Tuesday, June 12, 2012 6:11 AM
-
Saturday, June 09, 2012 10:08 AMYour other thread, you show calls to functions. Keep digging, deeper and deeper until there are no more functions to show, and when you get there, you'll see the actual call to the proc. When you get there, there won't be the N in front of the parameters.
-
Tuesday, June 12, 2012 6:11 AM
Thanks tinmgaye,
It worked ! I have updated the model and the function import but actually removing the SP and re-adding it did the trick.

