0

当sql命令中的条件是阿拉伯语时,sqldatareader会出现问题,如下所示:

select user_name from users where typ=N 'arabic text'

尽管有一个具有这种类型的用户名,但这不会检索任何数据,
所以你能帮我吗?谢谢^_^

4

1 回答 1

0

我已经重写了您的代码以使用查询参数。您希望避免将字符串直接放入您的查询中(无论如何,该类型很可能应该被规范化)。main 函数可能应该将一个客户端列表返回到您的表示层,然后由它负责显示客户端,但我没有走那么远。

由于您的查询是在 Management Studio 中运行的,因此您的数据库排序规则设置应该没问题。

public void ListClientsByType(string clientType)
{
    using (IDbConnection conn = new SqlConnection("connectionstring"))
    {
        IDbCommand cmd = conn.CreateCommand();
        cmd.CommandText = "SELECT nam FROM clients WHERE typ = @type";

        cmd.Parameters.Add(
            _CreateInputParameter(cmd, DbType.String, "@type", clientType));

        conn.Open();

        IDataReader dr = null;

        try
        {
            dr = cmd.ExecuteReader();

            // Work with results here
        }
        finally
        {
            if (dr != null)
                dr.Close();
        }
    }
}

private IDbDataParameter _CreateInputParameter(
    IDbCommand cmd, DbType type, string name, object value)
{
    IDbDataParameter p = cmd.CreateParameter();

    p.DbType = DbType.String;
    p.Direction = ParameterDirection.Input;
    p.ParameterName = name;
    p.Value = value;

    return p;
}
于 2010-12-04T20:37:12.323 回答