ExecuteReader未返回任何内容
本文关键字:任何内 返回 ExecuteReader | 更新日期: 2023-09-27 18:28:30
我有一个名为"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
子句,这是其他查询无法做到的…
然而,我可以运行这个存储过程,它会返回所有记录。。
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);
}
}
SqlCommand.Parameters属性