1

この問題自体がむしろ投機的であるため、議論は決定的なものではなく投機的なものになると思います。それは本質的にかなり混乱しています。

Microsoft.Practices.EnterpriseLibrarySQL Server のデータ アクセスに使用する .NET 4.0 C# コードを見ています。

このコードは、SQL Server Management Studio で適切に実行され、結果を返すストアド プロシージャを呼び出します。問題は、プロシージャが C# 側から呼び出されると、例外がスローされることです。

問題のあるコードは次のとおりです。

Database _db = DatabaseFactory.CreateDatabase(instance_name);
string _sql = "[dbo].[usp_stored_procedure]";
DbCommand _cmd = _db.GetStoredProcCommand(_sql);
/* _db.AddInParameter calls to supply parameters */
DataSet _ds = _db.ExecuteDataSet(_cmd);

最後の行は、次のような例外をスローします。

int を数値データ型に変換中に算術オーバーフロー エラーが発生しました。
System.Data.SqlClient.SqlConnection.OnError(SqlException 例外、ブール型 breakConnection)で
....
System.Data.SqlClient.SqlDataReader.Read()で
....
System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping マッピングで)
....
Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteDataSet (DbCommand コマンド) で

....
DataAccess.call_stored_procedure で (文字列 instance_name, int? _client_id, int? _client_group_id, int? _event_type_id, DateTime _start_date, DateTime _end_date, int? _employee_type_id, int? _survey_id, int? _ro_date )

不要なスタック トレースと、例外がスローされる関数を省略しました (私が蓄積しているもの)。引数はこの順序で提供され、型は正確に一致します。

ストアド プロシージャには の使用法がありDecimal(18, 10)、ストアド プロシージャは以前のデータ セットで動作します (C# 側でも同様です)。新しいデータの供給に問題が生じます。

私の「質問」は、この種の動作が既知の問題であるかどうか、またはどこから始めればよいかということです。SQL Server Management Studio で機能するものが C# コードの呼び出しでは機能しないというのは奇妙に思えます。

4

1 に答える 1

0

間違ったタイプのパラメーターを追加する可能性があります。sql のフィールドのタイプについて連絡し、codw にパラメーターを追加する必要があります。

于 2014-06-17T10:42:05.547 に答える