2010-01-02 27 views
3

我有一個SqlCommand:恰好爲Unicode在System.Data.SQLCommand什麼

「更新客戶提供集名稱= @name 其代碼= @code」

與此代碼:

cmd.Parameters[0].Value = "بهروز";//(some Unicode characters) 
cmd.Parameters[1].Value = 1; 
cmd.ExecuteNonQuery(); 

或驗證碼:

 UpdateCommand.CommandText = "UPDATE [Customers] SET [Name] = @p1 WHERE (([Code] = @p2) AND ((@p3 = 1 AND [Name] IS NULL) OR ([Name] = @p4)))"; 
     UpdateCommand.Parameters.Add("@p1", System.Data.SqlDbType.SmallInt, 0, "Name"); 
     UpdateCommand.Parameters.Add("@p2", System.Data.SqlDbType.NVarChar, 0, "Code"); 
     UpdateCommand.Parameters.Add("@p3", System.Data.SqlDbType.NText, 0, "Name"); 
     UpdateCommand.Parameters.Add("@p4", System.Data.SqlDbType.SmallInt, 0, "Name"); 

當我選擇客戶表時,我有很多「?」。
爲什麼SQLCommand在使用SQLDataAdapter時正常工作?
如何將我的Unicode數據轉換爲ANSI?

編輯:
換句話說:
什麼代碼所做的SqlDataAdapter使用?
任何人都有.net框架的那部分的源代碼?

+1

該列的數據類型是什麼?你用什麼工具來驗證內容?如果您使用SQLCommand將其重新檢索到.NET中,它會起作用嗎? – 2010-01-02 20:20:55

+0

Customers表中的名稱列是什麼類型?如果您使用Microsoft Management Studio或類似軟件進行檢查,表格是否包含正確的數據?換句話說:更新或選擇部分是否存在問題? – 2010-01-02 20:22:14

+0

第一個是nvarchar,第二個是數字(18,0)。 – Behrooz 2010-01-02 20:22:27

回答

5

親愛的科魯茲只使用一個簡單的SQL命令

N 'ناصرحاجلو'

每當你使用N參數, forceql使用unicode,沒有什麼會改正。

2

.NET中的所有字符串都是Unicode。 .NET中不存在ANSI字符串。如果您想將字符串編碼爲ANSI字符串,請使用Encoding.GetBytes

您的問題可能與其將數據發送到存儲過程的方式有關。我認爲你需要將sql數據類型添加到參數中。請嘗試以下代碼:

cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 30); 

請參閱SqlParameterCollection.Add方法獲取更多信息。

0

在猜測:嘗試設置參數的SqlDbType明確:

cmd.Parameters[0].Value = "بهروز";//(some Unicode characters) 
cmd.Parameters[0].SqlDbType = SqlDbType.NVarChar; 
cmd.Parameters[1].Value = 1; 
cmd.ExecuteNonQuery();