Bla*_*air 1 c# sql sql-server varchar stored-procedures
我有一个名为'MatchType'的表,它包含:
ID | MatchTypeName
1 | One Day
2 | Two Day
3 | T20
Run Code Online (Sandbox Code Playgroud)
我有一个方法来根据与下列值匹配的sting从该表中检索记录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;
}
Run Code Online (Sandbox Code Playgroud)
此方法调用此存储过程:
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
Run Code Online (Sandbox Code Playgroud)
在调用GetByName方法时,我传递了一个字符串"One Day".我通过调试确认了这一点.我无法发布有用的错误消息,因为没有生成.只是没有数据在读者中返回...
我有几个其他方法和存储过程使用类似的过程,他们工作.我能看到的唯一不同的是,我WHERE在varchar/string值上使用了该子句,这是其他查询不能做的事情......
然而,我可以运行此存储过程,它返回所有记录..
BEGIN
SET NOCOUNT ON
SELECT
[Id],
[MatchTypeName]
FROM
[dbo].[MatchType]
RETURN @@ERROR
END
Run Code Online (Sandbox Code Playgroud)
varchar声明没有大小的默认长度是1.您在存储的proc参数中声明它的大小,因此您只传递第一个字符.
更改您的声明:
(@matchTypeName varchar)
Run Code Online (Sandbox Code Playgroud)
相关尺寸:
(@matchTypeName varchar(20))
Run Code Online (Sandbox Code Playgroud)
另外,在代码中添加大小,并确保参数名称中的大小写与存储的proc匹配:
cmd.Parameters.Add("@matchTypeName", SqlDbType.VarChar, 20).Value = matchType;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |