gpt4 book ai didi

c# - ExecuteReader 不返回任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:59 28 4
gpt4 key购买 nike

我有一个名为“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))

此外,在代码中添加大小并确保参数名称中的大小写与存储过程匹配:

cmd.Parameters.Add("@matchTypeName", SqlDbType.VarChar, 20).Value = matchType;

关于c# - ExecuteReader 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34538088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com