0

同様の質問を多数読みましたが、答えはうまくいきませんでした。この関数を 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;
}
4

1 に答える 1

5

コマンド テキストを次のように変更します。

select name from test where name like @par + '%'

パラメータを次のように追加します。

select.Parameters.Add("par", SqlDbType.NVarChar, 10).Value = like;
于 2012-06-26T19:03:16.457 に答える