4

我正在VS2012使用MySQL数据库和Entity Framework 5.0.0.

当我尝试Complex从存储过程创建新类型时,单击“获取列信息”按钮时出现错误:

选定的存储过程或函数不返回任何列。

我的存储过程代码如下:

DROP PROCEDURE IF EXISTS SearchAlgemeenSet;

Delimiter //

CREATE PROCEDURE SearchAlgemeenSet(IN in_searchQuery VARCHAR(255))
BEGIN
      SELECT Blokken, Jaargang, Werk_Uren
FROM algemeensets
WHERE Blokken LIKE in_searchQuery 
   OR Jaargang LIKE in_searchQuery 
   OR Werk_Uren LIKE in_searchQuery;
END
//

Delimiter ;

in_searchQuery如果参数匹配,我很肯定它会返回列。

在我的研究中,我发现了很多 Microsoft SQL 数据库的解决方案。但是这些解决方案都不适用于 MySQL 数据库。

如何解决这个问题?

4

1 回答 1

0

in_searchQuery 如果参数匹配,我很肯定它会返回列。

因为您没有使用任何通配符进行部分搜索,除非找到完全匹配的in_searchQuery值,否则不会返回任何行。'%'要发生部分匹配,您需要在值中使用通配符in_searchQuery

修改后的程序,应该是这样的:

DROP PROCEDURE IF EXISTS SearchAlgemeenSet;

Delimiter //

CREATE PROCEDURE SearchAlgemeenSet(IN in_searchQuery VARCHAR(255))
BEGIN

    set @search_criteria := concat( '%', in_searchQuery, '%' );

    SELECT Blokken, Jaargang, Werk_Uren
    FROM algemeensets
    WHERE Blokken LIKE @search_criteria 
       OR Jaargang LIKE @search_criteria
       OR Werk_Uren LIKE @search_criteria;
END;
//

Delimiter ;

当没有搜索条件找到任何匹配项时,将返回空集。
在您的脚本语言中,您必须提前检查程序是否返回了任何结果。基于此,您可以显示未找到数据的消息,或者您可以执行其他操作。

于 2014-03-16T17:58:56.283 回答