我最近开始使用Linq to SQL,并想知道如何通过执行存储过程获得多行,这是一个我想要使用的简单sp:
CREATE PROCEDURE gsp_ftsmultiple
@SearchKey varchar(100)
AS
BEGIN
SET NOCOUNT ON;
SELECT Label, theContent
FROM FtsTest
WHERE FREETEXT( theContent, @SearchKey )
END
从管理工作室执行此sp很好,但生成的上下文类中的相应方法返回一个int值,我不知道如何获取实际行,尝试使用OUT参数,但它们只能返回一个结果。
答案 0 :(得分:1)
我认为您需要做的就是创建一个与您的结果模式匹配的类,并确保dbml中的函数将其作为返回类型。
请参阅msdn上的here
答案 1 :(得分:0)
尝试将全文谓词创建为包装函数而不是像this那样的sprocs。为我工作。
答案 2 :(得分:0)
当sqlmetal
生成此过程的代码时,它不会传递有效参数以使查询起作用。
尝试将这样的东西放在SP的顶部:
IF @SearchKey IS NULL OR LEN(@SearchKey) = 0
BEGIN
SELECT N'' AS Label, N'' AS theContent WHERE 1 = 0
END
[...]
现在推断出2个NVARCHAR列是通常的输出并相应地生成代码
PS。编码我的头,未经测试
麦克
答案 3 :(得分:0)
我测试了以下代码片段,它工作正常。如果你把生成的代码放在这里,我可以看看并检查问题出在哪里。无论如何,您可以创建一个与生成的数据上下文类同名的部分类,并按如下方式手动添加所需的方法。
public partial class FooDataContext: System.Data.Linq.DataContext
{
[System.Data.Linq.Mapping.Function(Name = "GetFoo")]
public System.Data.Linq.ISingleResult<Foo> GetFoo()
{
System.Data.Linq.IExecuteResult res = base.ExecuteMethodCall(this, (System.Reflection.MethodInfo)System.Reflection.MethodInfo.GetCurrentMethod());
return (System.Data.Linq.ISingleResult<Foo>)res.ReturnValue;
}
}
答案 4 :(得分:-1)
你可能最好只运行查询本身,因为你没有真正做任何需要程序的事情。只需确保正确地转义搜索键。