【解決方法】なぜ例外がスローされるのでしょうか


SQL サーバーで、次の sproc を作成しました。

SQL
CREATE PROCEDURE [dbo].[GetOutletInfo] 
@PermitID int
AS SELECT * FROM Outlets WHERE PermitID=@PermitID
GO

次に、C# コードでこれを実行します。

C#
var cn = new SqlConnection(connectionString);
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter("GetOutletInfo", cn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@PermitID", SqlDbType.Int).Value = PermitID;
da.Fill(ds, "GetOutletInfo");

実行時に、da.Fill は次の例外をスローします。

System.FormatException
HResult=0x80131537
メッセージ=パラメータ値を String から Int32 に変換できませんでした。
ソース=System.Data.SqlClient

私はグーグルで何時間も頭を悩ませてさまざまなことを試しましたが、成功しませんでした。 A何かご指摘や洞察をいただければ幸いです。 ありがとう

私が試したこと:

This query works (since it does not need a parameter)
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter("GetInspectionLettersQueue", cn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.Fill(ds, "GetInspectionLettersQueue");

Parameters.Add コマンドにパラメータを追加する前に、パラメータを int32 にキャストしようとしましたが、機能しませんでした。

解決策 1

そうですね、もっとコーヒーが必要だと思います。 PermitID は文字列ですが、「foo」に設定されていることが判明しました。当然のことですが、調べてくれてありがとう。「42」に設定すると機能しました。

私も感じません

解決策 2

SQL を覚えていると、パラメーターの型はすべて整数ではなく文字列である必要があります。 それを試してみてください。

コメント

タイトルとURLをコピーしました