У меня есть проект SqlServer с очень простым тестом для табличной функции: -
[SqlFunction(TableDefinition = "forename nvarchar(50)", FillRowMethodName = "TestFillRow", DataAccess = DataAccessKind.Read)]
public static IEnumerable TestConn(int ID)
{
using (SqlConnection con = new SqlConnection("context connection=true"))
{
//con.Open();
yield return "Anthony";
}
}
public static void TestFillRow(object obj, out string forename)
{
forename = (string)obj;
}
Обратите внимание, что Open в соединении в настоящее время закомментирован. После развертывания я могу выполнить это в SQL: -
SELECT * FROM [dbo].[TestConn](1)
Все работает нормально.
Теперь я раскомментирую con.open()
, и он терпит неудачу: -
Доступ к данным в этом контексте запрещен. Либо контекст является функцией или методом, не отмеченным DataAccessKind.Read или SystemDataAccessKind.Read, либо обратным вызовом для получения данных из метода FillRow табличной функции, либо методом проверки UDT.
Не вижу в чем проблема, функция TestConn получила DataAccessKind.Read
.
Кто-нибудь знает какие-либо другие причины получения этой ошибки?