6

我有一个 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");

当我选择客户表时,我有很多“?”。
为什么使用 SQLDataAdapter 时 SQLCommand 工作正确?
如何将我的 Unicode 数据转换为 ANSI?

编辑:
换句话说:
SQLDataAdapter 使用什么代码?
有人有.net 框架那部分的源代码吗?

4

3 回答 3

7

亲爱的 Behrooz 只需使用一个简单的 SQL 命令

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

每当您使用 N 时,您都将 forcesql 使用 unicode,并且什么都不会出错。

于 2010-01-04T15:20:42.507 回答
2

.NET 中的所有字符串都是 Unicode。.NET 中没有 ANSI 字符串这样的东西。如果要将字符串编码为 ANSI 字节数组,请使用Encoding.GetBytes

您的问题可能与将数据发送到存储过程的方式有关。我认为您需要将 sql 数据类型添加到参数中。试试下面的代码:

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

有关详细信息,请参阅SqlParameterCollection.Add方法。

于 2010-01-02T20:34:29.750 回答
0

猜测一下:尝试SqlDbType显式设置参数的:

cmd.Parameters[0].Value = "بهروز";//(some Unicode characters)  
cmd.Parameters[0].SqlDbType = SqlDbType.NVarChar;
cmd.Parameters[1].Value = 1;  
cmd.ExecuteNonQuery();  
于 2010-01-02T20:43:09.760 回答