我有以下代码。当我使用断点时,我可以看到 ["@myID"].Value 是一个真实值,例如 2467。但是,我无法将其转换为 tryParse 的字符串。我试过像下面这样使用“as string”,我也试过 toString()。我的 stringID 保持为空,因此 tryParse 将 myID 值保留为零。我确定这是一个微不足道的语法问题,但我很难过。我需要返回一个真实的ID比如2467等。
public static int myMethod(string name)
{
Database myDB = DatabaseFactory.CreateDatabase("myDatabase");
DbCommand myCommand = myDB.GetStoredProcCommand("myStoredProc");
myDB.AddInParameter(myCommand, "@Name", DbType.String, name);
myDB.AddOutParameter(myCommand, "@myID", DbType.Int32, 4);
int myID = 0;
int test = myDB.ExecuteNonQuery(myCommand);
string stringID = myCommand.Parameters["@myID"].Value as string;
bool canParse = int.TryParse(stringID, out myID);
return myID;
}
最佳答案
我的猜测是类型转换失败了。您将 OUT 参数声明为 INT,您也应该尝试将其作为 int 读回:
int stringID =(int) myCommand.Parameters["@myID"].Value ;
而且我认为您不需要在下一行再次尝试解析它。 myCommand.Parameters["@myID"].Value
应该已经包含该值。
关于c# - 为什么这个 SQL 输出参数不能很好地发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897491/