У меня проблемы с получением результата функции, которая находится в Informix и вызвана из кода VB .NET.
Это трассировка стека:
at IBM.Data.Informix.IfxDateTime.ValidateRange()
at IBM.Data.Informix.IfxDataReader.internalGetIfxDateTime(Int32 i)
at IBM.Data.Informix.IfxDataReader.GetValue(Int32 column, TypeMap typeMap)
at IBM.Data.Informix.IfxDataReader.GetValue(Int32 i)
at IBM.Data.Informix.IfxDataReader.GetValues(Object[] values)
at System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values)
at System.Data.ProviderBase.SchemaMapping.LoadDataRow()
at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at ServicesDAL.Repositories.RepositorioBase.GetDatatableFromCommand(String connectionString, String commandText, List`1 parameters, CommandType commandType, String& errorMessage)
Любая подсказка, почему это происходит?
И когда я выполняю функцию из клиента sql, все работает нормально и отображаются все результаты.
А это код:
internal static DataTable GetDatatableFromCommand(string connectionString, string commandText, List<ParameterObject> parameters, CommandType commandType, ref string errorMessage)
{
DataTable dt = null;
errorMessage = null;
IfxConnection connection = null;
try
{
// Conecto con la base de datos
connection = ConnectToDatabase(connectionString, ref errorMessage);
// Si es distinto de null y no hay errores entonces se conecto correctamente
if (connection != null && string.IsNullOrWhiteSpace(errorMessage))
{
IfxCommand cmd = connection.CreateCommand();
cmd.CommandText = commandText;
cmd.CommandType = commandType;
if (parameters != null)
{
IfxParameter parameter = null;
foreach (ParameterObject parObj in parameters)
{
parameter = new IfxParameter(parObj.Orden, parObj.Tipo);
parameter.Value = parObj.Valor;
cmd.Parameters.Add(parameter);
}
}
// Antes de ejecutar la llamada a la base de datos cambio el currentculture
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-ES");
// Creo un adaptador que le paso el comando y ya el lo parsea con el dataTable
IfxDataAdapter dataAdapter = new IfxDataAdapter(cmd);
dt = new DataTable();
dataAdapter.Fill(dt);
}
}
catch (Exception ex)
{
errorMessage = ex.Message;
}
finally
{
// Cierro la conexion siempre despues de sacar los datos
if (connection != null)
{
connection.Close();
connection = null;
}
}
return dt;
}
Обновление: могу ли я отформатировать дату до того, как достигнет программы .net? Я имею в виду, форматировать дату в функции informix.