Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建参数中没有'N'字符的语句_C#_Ado.net - Fatal编程技术网

C# 如何创建参数中没有'N'字符的语句

C# 如何创建参数中没有'N'字符的语句,c#,ado.net,C#,Ado.net,我有以下ADO.NETC#代码,用于执行带参数的存储过程。当我观察分析器时,它被列为 exec uspSecurityGetChildActivitiesByInternalName @ActivityInternalName = N'INVWLVIEWEDIT' 但我想把它修改成 exec uspSecurityGetChildActivitiesByInternalName @ActivityInternalName = 'INVWLVIEWEDIT' 我需要避免参数值之前的N。这

我有以下ADO.NETC#代码,用于执行带参数的存储过程。当我观察分析器时,它被列为

 exec uspSecurityGetChildActivitiesByInternalName @ActivityInternalName = N'INVWLVIEWEDIT'
但我想把它修改成

  exec uspSecurityGetChildActivitiesByInternalName @ActivityInternalName = 'INVWLVIEWEDIT'
我需要避免参数值之前的
N
。这应该是可能的,因为在我的原始跟踪中,它没有
N
(尽管我没有这方面的源代码)

在没有
N
的情况下,我们如何修改下面的C#代码以在探查器中创建
exec
语句

参考

  • 代码

    using (SqlCommand command = new SqlCommand(spName, connection))
    {
        WriteLogFunction(spStatement);
        command.CommandType = System.Data.CommandType.StoredProcedure;
    
        if (paramsList.Count > 0)
        {
           foreach (Parameter p in paramsList)
           {
               command.Parameters.AddWithValue(p.MyParameterName, p.MyVal);
           }
        }
    
        string resultVal=String.Empty;
    
        using (SqlDataReader reader = command.ExecuteReader())
        {
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    resultVal = reader.GetString(0);
                }
            }
        }
    
        //Other code  
    }
    

    通过将非Unicode参数的类型指定为
    VarChar
    ,可以强制非Unicode参数:

    command.Parameters.AddWithValue(p.MyParameterName, p.MyVal).SqlDbType = SqlDbType.VarChar;
    

    这应该传递不带“N”的参数-但如果不是所有参数都是字符串-则必须添加检查,以便整数和其他参数不会被拧紧。

    可以强制非Unicode参数,方法是将其类型指定为
    VarChar

    command.Parameters.AddWithValue(p.MyParameterName, p.MyVal).SqlDbType = SqlDbType.VarChar;
    

    这应该传递不带“N”的参数,但如果不是所有参数都是字符串,则必须添加检查,以便整数和其他参数不会出错。

    假设您的存储过程出于某种原因需要ANSI字符串而不是Unicode字符串:

    在代码中,您允许从传递的值推断参数的类型。NET字符串是Unicode字符串,因此参数类型被推断为Unicode字符串(这会导致N“”)。对于需要非Unicode的参数,需要将参数的DbType属性设置为AnsiString,或将SqlDbType设置为Text(与NText相反)。(或者是的……正如尤里所说,瓦尔查可能就是你想要的。)

    SQLParameter对象是从您对AddWithValue的调用返回的,因此您可以在需要时设置它


    我没有用您的代码对此进行测试,所以希望我没有遗漏什么,但这就是您指定参数类型的方式。

    假设您的存储过程出于某种原因需要ANSI字符串而不是Unicode字符串:

    在代码中,您允许从传递的值推断参数的类型。NET字符串是Unicode字符串,因此参数类型被推断为Unicode字符串(这会导致N“”)。对于需要非Unicode的参数,需要将参数的DbType属性设置为AnsiString,或将SqlDbType设置为Text(与NText相反)。(或者是的……正如尤里所说,瓦尔查可能就是你想要的。)

    SQLParameter对象是从您对AddWithValue的调用返回的,因此您可以在需要时设置它


    我没有用您的代码对此进行测试,所以希望我没有遗漏什么,但这就是您指定参数类型的方式。

    为什么<代码>N表示值作为unicode@YuriyGalanter我需要这个来使用默认设置;在不指定Unicodire的情况下,是否将所有参数传递给SP字符串?SP中定义的大小是多少?你说你想要,你说你需要,但你没有说为什么。如果我们能更好地了解您,可能会更容易提出有用的建议。@TaW我正在尝试从跟踪文件执行所有SP。为什么<代码>N表示值作为unicode@YuriyGalanter我需要这个来使用默认设置;在不指定Unicodire的情况下,是否将所有参数传递给SP字符串?SP中定义的大小是多少?你说你想要,你说你需要,但你没有说为什么。如果我们能更好地了解您,可能会更容易提出有用的建议。@TaW我正在尝试从跟踪文件执行所有SP。参考