C# t-sql命令参数通配符

C# t-sql命令参数通配符,c#,tsql,C#,Tsql,我读过很多类似的问题,但答案根本不起作用。在sql select*from HelloRow'o'中运行此函数不会返回任何行。运行HelloRow'one'返回名为one的行。fillrow方法不做任何事情,只读取字符串 [Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "HelloFillRow", DataAccess = DataAccessKind.Read, TableDefinition="message ncha

我读过很多类似的问题,但答案根本不起作用。在sql select*from HelloRow'o'中运行此函数不会返回任何行。运行HelloRow'one'返回名为one的行。fillrow方法不做任何事情,只读取字符串

[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "HelloFillRow", DataAccess = DataAccessKind.Read, TableDefinition="message nchar(20)")]
public static IEnumerable HelloQuery(SqlString like)
{
    ArrayList resultCollection = new ArrayList();

    using (SqlConnection connection = new SqlConnection("context connection=true"))
    {
        connection.Open();

        using (SqlCommand select = new SqlCommand(
            "select name from test where name like @par"
            , connection))
        {
            select.Parameters.Add("par", SqlDbType.NChar, 10).Value = like + "%";
            using (SqlDataReader selectReader = select.ExecuteReader())
            {
                while (selectReader.Read())
                {
                    SqlString nextName = selectReader.GetString(0);
                    resultCollection.Add(nextName.ToString());
                }
            }
        }
    }
    return resultCollection;
}

将命令文本更改为:

select name from test where name like @par + '%'
并添加如下参数:

select.Parameters.Add("par", SqlDbType.NVarChar, 10).Value = like;

将命令文本更改为:

select name from test where name like @par + '%'
并添加如下参数:

select.Parameters.Add("par", SqlDbType.NVarChar, 10).Value = like;

很确定问题是NChar vs NVARCHARD你想要子字符串匹配吗?在这种情况下,您需要像%一样换行,而不仅仅是有一个尾随符号。我注意到您正在将参数作为'par'而不是'@par'添加到命令中。我认为这会引起一个问题,但你声称用“一”调用函数确实有效…@JonSenchyna-这是可选的。我猜是这样,但我找不到任何说明这一点的文档。如果你知道的话,你能给我指一些吗?很确定问题是NChar对NVarcharDo你想要一个子字符串匹配吗?在这种情况下,您需要像%一样换行,而不仅仅是有一个尾随符号。我注意到您正在将参数作为'par'而不是'@par'添加到命令中。我认为这会引起一个问题,但你声称用“一”调用函数确实有效…@JonSenchyna-这是可选的。我猜是这样,但我找不到任何说明这一点的文档。如果你知道的话,你能给我指出一些吗?问题是固定长度参数类型的尾随空格。这将是对like如何工作的一个奇怪的见解,我将很快尝试它;为什么“1%”与NChar10“1”匹配,而“o%”与之不匹配?不幸的是,我得到了相同的结果-更正,只是忘了在create External中更改它。问题是固定长度参数类型的尾随空格。这将是一个奇妙的洞察,我将很快尝试它;为什么“1%”与NChar10“1”匹配,而“o%”与之不匹配?不幸的是,我得到了相同的结果-更正,只是忘了在“创建外部”中更改它