3

adoから送信された文字列に基づいて、データベース内の多くのテーブルを検索するSPを作成しました

Vb コード

Shared ReadOnly Property Connection() As String
    Get
        Return ConfigurationManager.ConnectionStrings("ConnString").ConnectionString
    End Get
End Property

Function GetData(ByVal SearchKey As String) As DataTable
    Dim sqlConn As New SqlConnection(Connection)
    Dim ds As New DataSet
    Dim sqlCmd As New SqlCommand("Search_List")
    Dim sqlAdapter As New SqlDataAdapter
    sqlCmd.CommandType = CommandType.StoredProcedure
    sqlCmd.Connection = sqlConn
    sqlAdapter.SelectCommand = sqlCmd
    sqlCmd.Parameters.Add(New SqlParameter("@SearchKey", SqlDbType.NVarChar, 255, ParameterDirection.Input, True, CByte(0), CByte(0), "SearchKey", DataRowVersion.Default, SearchKey))
    sqlCmd.Parameters.Add("RerurnValue", SqlDbType.Int)
    sqlCmd.Parameters("RerurnValue").Direction = ParameterDirection.ReturnValue
    Try
        sqlConn.Open()
        sqlAdapter.Fill(ds, "Result")
        sqlConn.Close()
    Catch ex As Exception
        Exit Function
    End Try
    Return ds.Tables("Result")
End Function

SQL SP は次のとおりです。

ALTER PROCEDURE [dbo].[Search_List](
    @SearchKey  NVARCHAR(200)   
)
AS
BEGIN
           SET NOCOUNT ON;
        DECLARE @Rc bigint
        DECLARE @Err bigint
        set @SearchKey = '%'+@SearchKey+'%'

    CREATE 
    TABLE 
        #Temp
            (
                ID              BIGINT,
                elementType     NVARCHAR(10),       
                NameAr          NVARCHAR(255),
                NAmeEn          NVARCHAR(255),
                DescAr          NVARCHAR(MAX),
                DescEn          NVARCHAR(MAX),
                URL             NVARCHAR(MAX)       
            )
    INSERT INTO #Temp 
    SELECT 
             Id
            ,'C'
            ,NameAr 
            ,NameEn 
            ,DescAr 
            ,DescEn 
            ,'Counsel.aspx'
    FROM 
            CMS_Councils  
    Where
            (NameAr like  @SearchKey    
                OR
            NameEn Like @SearchKey  
                OR
            DescAr Like @SearchKey  
                OR
            DescEn Like @SearchKey)
                AND
            isnull(Status,0) = 1    

    select * from #Temp 
    end

ご覧のとおり、VB で引数を Nvarchr として宣言し、SQL パラメータ@SearchKeyを Nvarchar として宣言しました。また、@SearchKey 検索で英語のデータを送信すると正しいデータが返されますが、@SearchKey でアラビア語の文字列を送信しようとすると、そこにあることを知っている結果が表示されませんでした。テーブル内のアラビア語データです

何か不足していますか?

アラビア語検索を許可するには、それ以上に何をすべきですか?

4

1 に答える 1

3

COLLATE次のキーワードを使用して照合を指定してみてください。

たとえば、後でアラビア語を指定する必要があります。COLLATE arabic_ci_as

SELECT 
         Id
        ,'C'
        ,NameAr 
        ,NameEn 
        ,DescAr 
        ,DescEn 
        ,'Counsel.aspx'
FROM 
        CMS_Councils  
Where
        (NameAr like  @SearchKey    
            OR
        NameEn Like @SearchKey  
            OR
        DescAr Like @SearchKey  
            OR
        DescEn Like @SearchKey)
            AND
        isnull(Status,0) = 1    
COLLATE arabic_ci_as
于 2013-07-04T07:33:29.450 に答える