【问题标题】:using LIKE command in Stored Procedure在存储过程中使用 LIKE 命令
【发布时间】:2026-01-27 18:35:02
【问题描述】:

我有一个这样的存储过程

ALTER PROCEDURE dbo.sp_CheckGlobalizationResourceValue
 (
   @ResourceObject NVARCHAR(255),
   @ResourceName NVARCHAR(128)
    )

AS

select count(*) from vpglobalizationresources
      where ResourceObject = @ResourceObject and 
ResourceName like '%' + @ResourceName + '%' 

我正在使用 Linq to SQL 类。我从 .cs 文件发送 ResourceObject 和 ResourceName,如上所示。它的 returnValue 总是 0 为什么?存储过程或cs类有问题吗?我在数据库中运行了这个查询,它在那里运行良好。

public static bool CheckGlobalizationResourceValue(string resourceObject, string resourceName)
    {
        try
        {
            using (var dataContext = new ResourceDBDataContext())
            {
                resourceObject = resourceObject.Replace(ConfigurationHelper.MainDirectory + "\\", "");
                resourceObject = resourceObject.Replace("\\", "/");
                //resourceName = string.Format("'%{0}%'", resourceName);

                var result = dataContext.sp_CheckGlobalizationResourceValue(resourceObject, resourceName);
                if ((int)result.ReturnValue == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
                //return (int)result.ReturnValue != 0;
            }
        }
        catch (Exception exception)
        {
            throw new Exception("An error occured when retrieving data from database");
        }
    }

【问题讨论】:

  • 而且我还从我的 .dbml 文件中删除了存储过程,并在更改后再次添加。
  • 给我表格的数据和结构以便更好地理解......
  • 这很难说,因为我不知道 dataContext.sp_CheckGlobalizationResourceValue 在做什么,而且我对 LINQ 也不是很熟悉,但基于你使用 result.ReturnValue 的事实,我希望你是引用存储过程返回的内容而不是其结果。默认情况下,存储过程的返回值为 0,除非您使用 RETURN 1; 之类的内容覆盖它。
  • 我在存储过程中通过这个查询修复了它! IF EXISTS(select * from vpglobalizationresources where ResourceObject = @ResourceObject and ResourceName like '%' + @ResourceName + '%') return 1 else return 0

标签: c# mysql sql .net linq-to-sql


【解决方案1】:

问题可能出在您的存储过程中。我猜你需要在 ResourceObject 过滤中使用like 语句

select count(*) from vpglobalizationresources
      where ResourceObject like @ResourceObject and 
ResourceName like '%' + @ResourceName + '%' 

@ResourceObject 中的 sleshes 也可能有问题。只需尝试使用参数的真实值执行Select 并检查是否有一些数据返回

【讨论】:

  • 我在 .cs 文件中调试并检查了它们在数据库中的值。如果我在数据库中编写该查询并运行,一切正常。所以 resourceobject 和 resourcename 都有正确的值。我认为调用这个的 .cs 方面有问题。