簡體   English   中英

如何使用C#從SQL Server搜索“波蘭語”文本?

[英]How to search “Polish” text from SQL Server using C#?

我必須在Windows應用程序中從SQL數據庫搜索波蘭語文本。 在“ SQL數據庫”中,該字段為波蘭語。

例如:DB字段是Id,名稱和值是1,Ąćłń。 我有一個用於輸入搜索文本的文本框。 當我輸入文本框值“Ąćłń”時,結果為空。 選擇查詢可以很好地使用英文字符。 我的問題是如何搜索波蘭文字?

這應該與搜索英語或任何其他語言的文本沒有什么不同。

  1. 連接到您的數據庫
  2. 觸發參數化搜索查詢,確保使用nvarchar作為參數類型
  3. 顯示結果!

所以基本上,有點像:

    public List<object> Search(string searchArgument)
    {
        string searchQry = "SELECT (list of columns) FROM dbo.YourTableName WHERE Name = @SearchArg;";

        // Define connection and command to use
        using (SqlConnection conn = new SqlConnection("....."))
        using (SqlCommand cmdSearch = new SqlCommand(searchQry, conn))
        {
            // add parameter to search command - make sure to define NVarChar and a valid length!
            cmdSearch.Parameters.Add("@SearchArg", SqlDbType.NVarChar, 50);

            // set parameter value
            cmdSearch.Parameters["@SearchArg"].Value = searchArgument;

            // open connection, execute query, handle results
            conn.Open();

            using (SqlDataReader rdr = cmdSearch.ExecuteReader())
            {
                // loop over rows returned
                while (rdr.Read())
                {
                    // do something with results - create your objects that you want to return...

                }

                // close reader 
                rdr.Close();
            }

            // close connection
            conn.Close();
        }
    } 

使用像實體框架這樣的OR映射器將使此操作變得更加容易。

  • 使用ACCENT_SENSITIVITY = OFF重建全文目錄CATALOGNAME;

  • 或者在查詢中指定區分重音的排序規則。 例如:

     select * from users where name like 'HELEN%' collate SQL_Latin1_General_CP1_CI_AI 
    • 如果沒有全文目錄 (應具有全文目錄 ),則可以配置數據庫,使其對口音敏感。 將排序規則更改為SQL_Latin1_General_CP1_CI_AI。

從數據庫管理員的角度來看,選項1和2最簡單

從程序員的角度來看,選項3是最簡單的

其他整理相關的技巧

  • 通過Select @@Version的SQL Server Select @@Version
  • 通過SELECT CONVERT (varchar, SERVERPROPERTY('collation')); SQL Server排序SELECT CONVERT (varchar, SERVERPROPERTY('collation'));
  • 波蘭語文字的表數據類型定義(即Nvarchar或varchar)

  • 理想的波蘭語排序規則是不區分大小寫的SQL_Polish_Cp1250_CI_AS_KI_WI

  • 將您的SQL Server修補到最新級別
  • 默認的SQL Server排序規則為SQL_Latin1_General_CP1_CI_AS
  • 評論這篇文章

WITH ACCENT_SENSITIVITY = {ON | OFF}

指定對於全文索引和查詢,要更改的目錄是區分重音還是不區分重音。

注意這里:

select * from member where name like 'müller' COLLATE German_PhoneBook_CI_AI 

它將找到“müller”,“ mueller”和“Müller”

SELECT * FROM mytest WHERE SOUNDEX (col1 )=SOUNDEX ('Muller')

它將找到“müller”,“ mueller”和“Müller”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM