Linq to SQL 存储过程参数

4

我想从linq中调用一个存储过程,这个存储过程有5个参数,但我只想传递/需要其中的2个。

当我在代码中添加参数时,由于它需要全部5个参数,所以无法构建。请问应该如何调用这个存储过程?

3个回答

3
你会得到类似这样的东西:
MyDbDataContext db = new MyDbDataContext();

db.MyStoredProc(customerID, "sometext", null, null, null);

成功与失败将取决于您存储过程中处理这些最后3个参数的SQL语句是否为空。


LinqToSql会自动将参数转换为可空类型吗?我记不清了。如果不是,这个方法就行不通。 - Allen Rice
是的,LinqToSql会将它们转换为可空类型(假设该字段可为空)。 - Jacob Proffitt

2
另一个选项是将存储过程拖入您的DBML中第二次,并删除您不想传递的参数。

和我的方法一样,但因为用户界面为您完成,所以更性感,不错。 - Allen Rice
存在一个重要的行为差异。对于非空值,按照您的建议传递0将覆盖存储过程声明中设置的任何默认值。 - Frank Schwieterman

1

overload 存储过程调用。

我没有它在我面前,但你需要去你的 DataAccessName.cs 文件并创建一个与相同签名的方法名称

自动生成的存储过程方法签名:

void sp_sproc(int a, int b, int c, int d, int e);

这个在你的DataAccessName.cs文件中完成

void sp_sproc(int a, int b)
{
    this.sp_sproc(a,b,0,0,0);
}

如果参数是可空的,就像这样。
void sp_sproc(int? a, int? b, int? c, int? d, int? e);

那么你可以这样做

void sp_sproc(int a, int b)
{
    this.sp_sproc(a,b,null,null,null);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接