[英]ExecuteReader not returning anything
我有一个名为“ MatchType”的表,它包含:
ID | MatchTypeName
1 | One Day
2 | Two Day
3 | T20
我有一种方法可以根据匹配MatchTypeName
中的值的字符串从该表中检索记录:
public static int GetByName(string matchType)
{
MatchType item = new MatchType();
using (SqlConnection con = new SqlConnection(BaseDataAccessLayer.GetConnectionStringByName()))
{
using (SqlCommand cmd = new SqlCommand(STORED_PROC_GetByName, con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@matchTypeName", SqlDbType.VarChar, 20).Value = matchType;
con.Open();
using (IDataReader reader = cmd.ExecuteReader())
{
item.LoadFromReader(reader);
}
}
}
return item.Id;
}
此方法调用此存储过程:
CREATE PROCEDURE [dbo].[MatchType_GetByName]
(@matchTypeName varchar(20))
AS
BEGIN
SET NOCOUNT ON
SELECT
[Id], [MatchTypeName]
FROM
[dbo].[MatchType]
WHERE
[MatchTypeName] = @matchTypeName
RETURN @@ERROR
END
当调用GetByName
方法时,我要传递一个字符串“ One Day”。 我已经通过调试确认了这一点。 我无法发布错误消息,因为没有人正在生成错误消息。 读取器中没有返回任何数据...
我还有其他两种使用类似过程的方法和存储过程,它们可以工作。 我唯一能看到的是区别是我在varchar / string值上使用WHERE
子句,而其他查询则不这样做...
但是我可以运行此存储的proc,它返回所有记录。
BEGIN
SET NOCOUNT ON
SELECT
[Id],
[MatchTypeName]
FROM
[dbo].[MatchType]
RETURN @@ERROR
END
声明的不带大小的varchar
的默认长度为1。您在存储的proc参数中像声明了它一样,因此只传递第一个字符。
更改您的声明:
(@matchTypeName varchar)
到相关大小:
(@matchTypeName varchar(20))
另外,在代码中添加大小,并确保参数名称中的大小写与您存储的proc匹配:
cmd.Parameters.Add("@matchTypeName", SqlDbType.VarChar, 20).Value = matchType;
该过程正在运行查询并显示结果(这就是为什么它在SSMS中起作用的原因),但实际上未返回任何内容。 试试这个(注意,我还没有实际测试过)。
CREATE PROCEDURE [dbo].[MatchType_GetByName]
@matchTypeName varchar(20),
@matchTypeID INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
SELECT
@matchTypeID = [Id], [MatchTypeName]
FROM
[dbo].[MatchType]
WHERE
[MatchTypeName] = @matchTypeName
RETURN @@ERROR
END
尝试这个:
using (SqlCommand cmd = new SqlCommand(STORED_PROC_GetByName, con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@matchTypeName", matchType);
con.Open();
using (IDataReader reader = cmd.ExecuteReader())
{
item.LoadFromReader(reader);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.