【问题标题】:Can't supply stored procedure parameter无法提供存储过程参数
【发布时间】:2012-11-14 19:15:27
【问题描述】:
OpenSqlConnection();

SqlCommand cmd = new SqlCommand("ReturnCharacterInfo", Con);
cmd.Parameters.AddWithValue("@CharacterID", CharacterID);

SqlDataReader dr = cmd.ExecuteReader();

当我运行上面的代码时,它会抛出异常

过程或函数“ReturnCharacterInfo”需要参数“@CharacterID”,但未提供。

但正如您在代码中看到的那样,我正在提供@CharacterID 参数,它不是空的或空的。

存储过程:

    [ReturnCharacterInfo] @CharacterID int 
as
   select 
      CharacterName, characterSurname, CharacterIsMale, CharacterAge, 
      CharacterMood, CharacterHealth, CharacterInCity, CharacterInLocation, 
      Cities.CityName, Locales.LocaleTitle 
   from 
      Characters 
   INNER JOIN 
      Cities on Cities.CityID = Characters.CharacterInCity
   INNER JOIN 
      Locales on Locales.LocaleID = Characters.CharacterInLocation
   Where 
      CharacterID = @CharacterID

有什么建议吗?

【问题讨论】:

  • 显示存储过程,显示更多代码。
  • 这是一个存储的过程——不是存储的产品,因为你一直在输入英文...,produce是水果还有蔬菜之类的.....

标签: c# asp.net sql-server stored-procedures


【解决方案1】:

我会尝试显式指定参数的类型 - 如果值为 null,则尤其重要:

SqlCommand cmd = new SqlCommand("ReturnCharacterInfo", Con);

// added as per CodeNaked's comment - thanks! You've nailed it right on the head!
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@CharacterID", SqlDbType.Int).Value = CharacterID;

另外:你有错别字吗? 三重检查所有出现的CharacterID - 你的代码中是否碰巧有CharachterID 或类似的东西??

【讨论】:

  • 他还需要cmd.CommandType = CommandType.StoredProcedure;
  • 看起来我忘记了 cmd.CommandType = CommandType.StoredProcedure;谢谢@CodeNaked
【解决方案2】:

正如CodeNaked所指出的,您需要设置SqlCommand的命令类型。由于存储过程的执行方式,需要告知 SqlCommand 对象它是一个存储过程。

OpenSqlConnection();

SqlCommand cmd = new SqlCommand("ReturnCharacterInfo", Con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CharacterID", CharacterID);

SqlDataReader dr = cmd.ExecuteReader();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多