我的DBA创建了以下存储过程,他坚持认为在SQL Server中调用时工作正常:
CREATE procedure [dbo].[GetParentID]
@SSHIP_AppID as varchar(50),
@ParentID as varchar(150) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ParentID = a.iBuild_GUID
FROM dbo.XRef_iBuild_SSHIP as a
WHERE a.SSHIP_appId = @SSHIP_AppID
AND a.SSHIP_appId <> ''
END
我创建了以下ADO.NET Wrapper,但是我无法获取输出参数。我一直以“OUTPUT”作为其值:
private string GetParentId(string appId)
{
var connection = new SqlConnection();
string parentId = String.Empty;
try
{
connection.ConnectionString = "...)
var command = new SqlCommand("GetParentId", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@SSHIP_AppID", appId));
command.Parameters.Add(new SqlParameter("@ParentID", ParameterDirection.Output));
connection.Open();
command.ExecuteNonQuery();
parentId = (command.Parameters["@ParentId"].Value).ToString();
}
catch (Exception ex)
{
LogError(appId, ex.ToString(), "Interface12 - Cannot get ParentId", null, 0);
}
finally
{
connection.Close();
}
return parentId;
}
}
我做错了什么?
答案 0 :(得分:1)
在new SqlParameter("@ParentID", ParameterDirection.Output)
中,第二个参数被视为object value
参数,并且显然已转换为字符串。
(在我看来,这种隐式转换是ADO.NET中的一个设计缺陷。它应该为任何未知的输入类型抛出异常。)。
选择更好的过载。