Author: rgrabowski
Date: Tue Jul 18 17:37:54 2006
New Revision: 423312
URL: http://svn.apache.org/viewvc?rev=423312&view=rev
Log:
Reverted from r422779 to r422475. Revision r422779 bound the DataTable using a
DataAdapter which populates the DataTable without using IBatisNet's type
handlers.
Modified:
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs
Modified:
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
URL:
http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs?rev=423312&r1=423311&r2=423312&view=diff
==============================================================================
---
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
(original)
+++
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
Tue Jul 18 17:37:54 2006
@@ -820,13 +820,13 @@
#endregion
- public DataTable ExecuteQueryForDataTable(IDalSession session,
object parameterObject, DataTable resultObject)
+ public DataTable ExecuteQueryForDataTable(IDalSession session,
object parameterObject)
{
RequestScope request =
_statement.Sql.GetRequestScope(this, parameterObject, session);
_preparedCommand.Create(request, session,
this.Statement, parameterObject);
- return RunQueryForDataTable(request, session,
resultObject);
+ return RunQueryForDataTable(request, session,
parameterObject);
}
#region ExecuteQueryForMap
@@ -916,13 +916,19 @@
}
- public DataTable RunQueryForDataTable(RequestScope request,
IDalSession session, DataTable resultObject)
+ public DataTable RunQueryForDataTable(RequestScope request,
IDalSession session, object parameterObject)
{
DataTable dataTable = null;
using (IDbCommand command = request.IDbCommand)
{
- dataTable =
(DataTable)_resultStrategy.Process(request, null, resultObject);
+ using (IDataReader reader =
command.ExecuteReader())
+ {
+ while (reader.Read() )
+ {
+ dataTable =
(DataTable)_resultStrategy.Process(request, reader, dataTable);
+ }
+ }
}
return dataTable;
Modified:
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
URL:
http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs?rev=423312&r1=423311&r2=423312&view=diff
==============================================================================
---
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
(original)
+++
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
Tue Jul 18 17:37:54 2006
@@ -40,22 +40,43 @@
#region IResultStrategy Members
/// <summary>
- /// To Do
+ /// Processes the specified <see cref="IDataReader"/>
+ /// when a 'resultClass' attribute is specified on the
statement and
+ /// the 'resultClass' attribute is a <see cref="DataTable"/>.
/// </summary>
/// <param name="request">The request.</param>
/// <param name="reader">The reader.</param>
/// <param name="resultObject">The result object.</param>
public object Process(RequestScope request, IDataReader reader,
object resultObject)
{
- DataTable dataTable = resultObject as DataTable;
+ object outObject = resultObject;
- DataAdapter dataAdapter =
request.Session.DataSource.DbProvider.CreateDataAdapter() as DataAdapter;
- dataAdapter.SelectCommand = request.IDbCommand;
+ if (outObject == null)
+ {
+ outObject = new DataTable(request.Statement.Id);
- // The Fill operation then adds the rows to the
specified destination DataTable object in the DataSet,
- // creating the DataTable object if it does not already
exist.
- dataAdapter.Fill(dataTable);
- return dataTable;
+ DataTable dataColumn = reader.GetSchemaTable();
+ for (int i = 0; i < dataColumn.Rows.Count; i++)
+ {
+ ((DataTable)
outObject).Columns.Add(dataColumn.Rows[i][0].ToString());
+ }
+ }
+
+ DataRow dataRow = ((DataTable) outObject).NewRow();
+ int count = reader.FieldCount;
+ for (int i = 0; i < count; i++)
+ {
+ ResultProperty property = new ResultProperty();
+ property.PropertyName = "value";
+ property.ColumnIndex = i;
+ property.TypeHandler =
request.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(reader.GetFieldType(i));
+ dataRow[i] = property.GetDataBaseValue(reader);
+ }
+ ((DataTable) outObject).Rows.Add(dataRow);
+
+ return outObject;
}
+ #endregion
+ }
}
Modified: ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs
URL:
http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs?rev=423312&r1=423311&r2=423312&view=diff
==============================================================================
--- ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs
(original)
+++ ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs Tue Jul
18 17:37:54 2006
@@ -613,8 +613,7 @@
#endregion
-
- public DataTable QueryForDataTable(string statementName, object
parameterObject, DataTable resultObject)
+ public DataTable QueryForDataTable(string statementName, object
parameterObject)
{
bool isSessionLocal = false;
IDalSession session = _sessionHolder.LocalSession;
@@ -630,7 +629,7 @@
try
{
IMappedStatement statement =
GetMappedStatement(statementName);
- dataTable =
statement.ExecuteQueryForDataTable(session, parameterObject, resultObject);
+ dataTable =
statement.ExecuteQueryForDataTable(session, parameterObject);
}
catch
{