Я ожидаю, что обсуждения будут более умозрительными, чем окончательные, потому что проблема скорее сама спекулятивная. Это довольно смешано в природе.Ошибка System.Data.SqlClient при успешном завершении SQL Server Management Studio
Я ищу код .NET 4.0 C#, который использует Microsoft.Practices.EnterpriseLibrary
для доступа к данным SQL Server.
Код вызывает хранимую процедуру, которая хорошо работает в 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 исключение, Boolean breakConnection)
....
в System.Data.SqlClient.SqlDataReader.Read()
....
в системе. Data.Common.DataAdapter.FillLoadDataRow (SchemaMapping отображение)
....
в Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteDataSet (команда DbCommand)....
в DataAccess.call_stored_procedure (string instance_name, int? _c lient_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#.
Это не ошибка, связанная SQL Server, это указывает, что возвращаемое значение из базы данных не может быть привязана к типу данных .NET, который вы используете в DataSet. –
Вы должны приложить SQL Profiler и посмотреть, выполняет ли код SQL-оператор, который вы предполагаете. – StingyJack
проверьте тип данных схемы таблицы, а затем сравните его с типом данных передаваемых вами значений или попытайтесь найти – MethodMan