2015-09-03 18 views
0

問題是,當用戶插入non-Latin字數據庫,如果整理不設置爲alphabet,這個詞來自像「?????」但是,如果用戶插入Word像N'word'或我選擇它像N'word'沒有問題。
我在C#側使用hastable function那麼有沒有任何解決方案可以自動使用N'word格式或者我必須在文本之前每次使用N來調用函數?順便說一下,我已經使用NVARCHAR格式。設置非拉丁字母爲C#的側SQL

問簡單的方法;
每次從數據庫中選擇項目時,我都不想使用N'word'格式。
是否有任何觸發器,存儲過程或函數在我選擇的文本之前自動添加N.

回答

0

你爲什麼不使用某種ORM。小巧玲瓏是一個輕量級的ORM: https://github.com/StackExchange/dapper-dot-net

這將解決你的問題,參數傳遞,如果這是你有

+0

數據庫和表已經創建並且太大而無法更改。所以我認爲我不能使用ORM,但是謝謝。 –

+0

使用ORM不會影響數據庫。按照Guffa的建議,另外使用'SqlCommand'。你做這件事的方式在很多方面都是錯誤的 – nomail

1

你不應該使用N'word'格式的一切,你應該使用參數的煩惱。當你將值連接成一個字符串來創建一個查詢時,它會對SQL注入攻擊敞開大門,除非你管理完全正確地轉義所有輸入。

將參數放入查詢中,並將值添加到該命令的Parameters集合中。例如:

string query = "select Id from Persons where Name = @Name"; 

using (SqlCommand cmd = new SqlCommand(query, connection)) { 

    cmd.Parameters.Add('@Name', SqlDbType.NVarChar, 50).value = name; 

    using (SqlDataReader reader = cmd.ExecuteReader()) { 
    while (reader.Read()) { 
     ... 
    } 
    } 

} 

使用Unicode類型,如NVarChar用於該參數確保了參數值爲Unicode,相當於N'word'格式發送。