2
OpenSqlConnection();

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

SqlDataReader dr = cmd.ExecuteReader();

上記のコードを実行すると、例外がスローされます

プロシージャまたは関数'ReturnCharacterInfo'には、指定されていないパラメータ'@CharacterID'が必要です。

しかし、コードでわかるように、私は@CharacterIDパラメーターを供給していて、それは空でもnullでもありません。

ストアドプロシージャ:

    [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

助言がありますか?

4

2 に答える 2

2

パラメータのタイプを明示的に指定しようとします-値が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コードのどこかにそのようなものがありますか?

于 2012-11-14T19:18:23.677 に答える
1

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();
于 2012-11-14T19:25:03.043 に答える