【问题标题】:Trying to get value of stored procedure - Error: "does not contain a definition"试图获取存储过程的值 - 错误:“不包含定义”
【发布时间】:2011-10-07 05:23:08
【问题描述】:
ALTER procedure FullSearch(@sumeryFieldOnly as bit,@allPropertyCompany as bit,@txtSearc as nvarchar(200)) 
as 
begin
if @sumeryFieldOnly=1
begin
    select SummaryField,NameCompany,idCompany from propertyCompany where SummaryField like '%'+@txtSearch+'%'
end
if @allPropertyCompany =1 
begin
        select IdCompany, NameCompany,Manager,CenterOfficeAddress,CompanyAddress,Website,EmailCompany,Tel1,Tel2,Country,Province,City,WorkExperience,ResumeManager,HistoryCompany,DescriptionField,SummaryField,'MainPP.aspx?idCompany='+cast(IdCompany as nvarchar(20)) as URL
        from PropertyCompany
        where   NameCompany like '%'+@txtSearch+'%' or Manager like '%'+@txtSearch+'%' or CenterOfficeAddress like '%'+@txtSearch+'%' or CompanyAddress like '%'+@txtSearch+'%' or Website like '%'+@txtSearch+'%' or EmailCompany like '%'+@txtSearch+'%' or Tel1 like '%'+@txtSearch+'%' or Tel2 like '%'+@txtSearch+'%' or Country like '%'+@txtSearch+'%' or Province like '%'+@txtSearch+'%' or City like '%'+@txtSearch+'%' or WorkExperience like '%'+@txtSearch+'%' or ResumeManager like '%'+@txtSearch+'%' or HistoryCompany like '%'+@txtSearch+'%' or DescriptionField like '%'+@txtSearch+'%' or SummaryField like '%'+@txtSearch+'%'
end

end

LINQ

     var result = dc.FullSearch(true,false,"abc");
    foreach (var item in result){
        str +=item.SummaryField;
    }

str 工作正常并显示SummaryField

但是

var result = dc.FullSearch(false,true,"abc");
    foreach (var item in result){
        str +=item.idCompany;
    }

返回错误:

错误:“FullSearchResult”不包含定义 'IdCompany' 并且没有扩展方法 'IdCompany' 接受第一个 可以找到“FullSearchResult”类型的参数(您是否缺少 使用指令还是程序集引用?)

【问题讨论】:

  • 挑剔:这将是 SummaryFieldOnly - 不是 SummaryFieldOnly(在您存储的 proc 参数中)

标签: sql sql-server linq linq-to-sql stored-procedures


【解决方案1】:

这里存在区分大小写的问题。

在您的 SP 中,您有两个选择语句。一种是返回idCompany,另一种是返回IdCompany

如果你在你的 SP 中修复它,它可能会正常工作。

C# 区分大小写;为 SP 的结果创建了一个类,因此如果大小写有歧义,可能会出现问题。

【讨论】:

  • 您是否修复了存储过程,然后从 LINQ DBML 图中删除了存储过程,然后将存储过程重新添加到 LINQ DBML 图中?
  • 我不明白。能详细解释一下吗?
【解决方案2】:

您将根据参数值返回不同形状的结果集。

您看到此异常是因为 LINQ To SQL 将结果集映射到类 FullSearchResult。在设

在运行时,您尝试将更多列/属性加载到结果类中。如果不是IdCompany 抛出错误,那就是Manager,以此类推。

建议您将存储过程重构为:

  • 无论输入是什么,都返回一个可预测的、形状一致的结果集。
  • 为“最宽”的结果集创建/定义一个表变量。
  • 在您的分支中,插入该表变量。
  • 在存储过程结束时从表中选择所有列。

【讨论】:

  • 这是正确的。如果现在显示 item.idcompany 但仍然在运行时显示错误而不是对象引用
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2018-12-25
  • 2019-11-02
相关资源
最近更新 更多