Skip to content

Commit ba793c7

Browse files
committed
Code distributed in partial classes
Code distributed in partial classes
1 parent b480a51 commit ba793c7

13 files changed

+789
-701
lines changed

src/CfCommand.DataAdapter.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data;
4+
5+
namespace ConnectionFactory
6+
{
7+
public partial class CfCommand : IDisposable
8+
{
9+
#region DataAdapter
10+
11+
/// <summary>
12+
/// DataAdapter Performs and returns the DataSet
13+
/// </summary>
14+
/// <param name="cmdType">Command Type (text, procedure or table)</param>
15+
/// <param name="cmdText">Command Text, procedure or table name</param>
16+
/// <param name="cmdParms">Command Parameters (@parameter)</param>
17+
/// <returns>DataSet</returns>
18+
[System.Diagnostics.DebuggerStepThrough]
19+
public DataSet DataAdapter(CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null)
20+
{
21+
// we use a try/catch here because if the method throws an exception we want to
22+
// close the connection throw code, because no datareader will exist, hence the
23+
// commandBehaviour.CloseConnection will not work
24+
try
25+
{
26+
Logger.InfoFormat("DataAdapter: {0}", cmdText);
27+
Logger.Info(cmdParms);
28+
29+
_conn.EstablishFactoryConnection();
30+
var dda = _conn.CreateDataAdapter();
31+
PrepareCommand(cmdType, cmdText, cmdParms);
32+
33+
dda.SelectCommand = _cmd;
34+
var ds = new DataSet();
35+
dda.Fill(ds);
36+
return ds;
37+
}
38+
catch (Exception ex)
39+
{
40+
Logger.Error(ex);
41+
throw new CfException("Unknown Error (Connection Factory: DataAdapter) " + ex.Message, ex);
42+
}
43+
}
44+
45+
#endregion
46+
}
47+
}

src/CfCommand.ExecuteNonQuery.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data.Common;
4+
5+
namespace ConnectionFactory
6+
{
7+
public partial class CfCommand : IDisposable
8+
{
9+
#region ExecuteNonQuery
10+
11+
//[System.Diagnostics.DebuggerStepThrough]
12+
public int ExecuteNonQuery(CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null)
13+
{
14+
Logger.Debug("Begin Method");
15+
try
16+
{
17+
Logger.InfoFormat("ExecuteNonQuery: {0}", cmdText);
18+
Logger.Info(cmdParms);
19+
20+
_conn.EstablishFactoryConnection();
21+
PrepareCommand(cmdType, cmdText, cmdParms);
22+
23+
Logger.Debug("End Method");
24+
return _cmd.ExecuteNonQuery();
25+
}
26+
catch (DbException dbe)
27+
{
28+
Logger.Error(dbe);
29+
throw new CfException("Unknown error in database: " + dbe.Message, dbe);
30+
31+
}
32+
catch (Exception ex)
33+
{
34+
Logger.Error(ex);
35+
throw new CfException("Error on Connection Factory Mechanism: " + ex.Message, ex);
36+
}
37+
}
38+
39+
#endregion
40+
}
41+
}

src/CfCommand.ExecuteReader.cs

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data;
4+
using System.Dynamic;
5+
using System.Linq;
6+
7+
namespace ConnectionFactory
8+
{
9+
public partial class CfCommand : IDisposable
10+
{
11+
#region ExecuteReader
12+
13+
/// <summary>
14+
/// Performs datareader
15+
/// </summary>
16+
/// <param name="cmdType">Command Type (text, procedure or table)</param>
17+
/// <param name="cmdText">Command Text, procedure or table name</param>
18+
/// <param name="cmdParms">Command Parameters (@parameter)</param>
19+
/// <returns>Data Reader</returns>
20+
[System.Diagnostics.DebuggerStepThrough]
21+
public IDataReader ExecuteReader(CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null)
22+
{
23+
try
24+
{
25+
Logger.InfoFormat("ExecuteReader: {0}", cmdText);
26+
Logger.Info(cmdParms);
27+
28+
_conn.EstablishFactoryConnection();
29+
PrepareCommand(cmdType, cmdText, cmdParms);
30+
return _cmd.ExecuteReader(CommandBehavior.CloseConnection);
31+
}
32+
catch (Exception ex)
33+
{
34+
Logger.Error(ex);
35+
throw new CfException("Unknown Error (Connection Factory: ExecuteReader) " + ex.Message, ex);
36+
}
37+
}
38+
39+
public IDataReader ExecuteReader(CfCommandType cmdType, string cmdText, object cmdParms)
40+
{
41+
try
42+
{
43+
IList<CfParameter> cfParams = null;
44+
if (cmdParms != null)
45+
{
46+
if (!(cmdParms is IEnumerable<CfParameter>))
47+
{
48+
49+
var props = cmdParms as ExpandoObject as IDictionary<string, object>;
50+
if (props != null)
51+
{
52+
cfParams = new List<CfParameter>(props.Count());
53+
foreach (var p in props)
54+
{
55+
cfParams.Add(new CfParameter(p.Key, p.Value));
56+
}
57+
}
58+
else
59+
{
60+
var properties = cmdParms.GetType().GetProperties();
61+
if (properties.Any())
62+
{
63+
cfParams = new List<CfParameter>(properties.Count());
64+
foreach (var property in properties)
65+
{
66+
cfParams.Add(new CfParameter(property.Name, property.GetValue(cmdParms, null)));
67+
}
68+
}
69+
}
70+
}
71+
}
72+
73+
_conn.EstablishFactoryConnection();
74+
PrepareCommand(cmdType, cmdText, cfParams);
75+
return _cmd.ExecuteReader(CommandBehavior.CloseConnection);
76+
}
77+
catch (Exception ex)
78+
{
79+
Logger.Error(ex);
80+
throw new CfException("Unknown Error (Connection Factory: ExecuteReader) " + ex.Message, ex);
81+
}
82+
}
83+
84+
#endregion
85+
}
86+
}

src/CfCommand.ExecuteScalar.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace ConnectionFactory
5+
{
6+
public partial class CfCommand : IDisposable
7+
{
8+
#region ExecuteScalar
9+
10+
[System.Diagnostics.DebuggerStepThrough]
11+
public T ExecuteScalar<T>(CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null)
12+
{
13+
try
14+
{
15+
Logger.InfoFormat("ExecuteScalar: {0}", cmdText);
16+
Logger.Info(cmdParms);
17+
18+
_conn.EstablishFactoryConnection();
19+
PrepareCommand(cmdType, cmdText, cmdParms);
20+
var returnValue = _cmd.ExecuteScalar();
21+
_cmd.Dispose();
22+
if (returnValue is DBNull || returnValue == null)
23+
{
24+
return default(T);
25+
}
26+
try
27+
{
28+
return (T)returnValue;
29+
}
30+
catch (Exception ex)
31+
{
32+
Logger.Error(ex);
33+
throw new CfException(String.Format("Conversion error in ({0})\"{1}\" - (Connection Factory: ExecuteScalar) > {2}", typeof(T).Name, returnValue, ex.Message), ex);
34+
}
35+
}
36+
catch (Exception ex)
37+
{
38+
Logger.Error(ex);
39+
throw new CfException("Unknown Error (Connection Factory: ExecuteScalar) " + ex.Message, ex);
40+
}
41+
}
42+
43+
public dynamic ExecuteScalar(CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null)
44+
{
45+
_conn.EstablishFactoryConnection();
46+
PrepareCommand(cmdType, cmdText, cmdParms);
47+
dynamic returnValue = _cmd.ExecuteScalar();
48+
_cmd.Dispose();
49+
50+
if (returnValue is DBNull || returnValue == null)
51+
{
52+
return default(dynamic);
53+
}
54+
55+
return returnValue;
56+
}
57+
58+
#endregion
59+
}
60+
}

src/CfCommand.LazyLoad.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data;
4+
5+
namespace ConnectionFactory
6+
{
7+
public partial class CfCommand : IDisposable
8+
{
9+
#region LazyLoad
10+
11+
/// <summary>
12+
/// Performs LazyLoad
13+
/// </summary>
14+
/// <param name="cmdType">Command Type (text, procedure or table)</param>
15+
/// <param name="cmdText">Command Text, procedure or table name</param>
16+
/// <param name="cmdParms">Command Parameters (@parameter)</param>
17+
/// <returns>IEnumerable IDataRecord</returns>
18+
[System.Diagnostics.DebuggerStepThrough]
19+
public IEnumerable<IDataReader> LazyLoad(CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null)
20+
{
21+
Logger.InfoFormat("LazyLoad: {0}", cmdText);
22+
Logger.Info(cmdParms);
23+
24+
_conn.EstablishFactoryConnection();
25+
PrepareCommand(cmdType, cmdText, cmdParms);
26+
27+
using (var reader = _cmd.ExecuteReader(CommandBehavior.CloseConnection))
28+
{
29+
while (reader.Read())
30+
{
31+
yield return reader;
32+
}
33+
}
34+
}
35+
36+
#endregion
37+
}
38+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data;
4+
5+
namespace ConnectionFactory
6+
{
7+
public partial class CfCommand : IDisposable
8+
{
9+
#region LazyLoadForObjects
10+
11+
/// <summary>
12+
/// Datareader Performs and returns the list loaded entities
13+
/// </summary>
14+
/// <typeparam name="T">type of entity returned</typeparam>
15+
/// <param name="cmdType">Command Type (text, procedure or table)</param>
16+
/// <param name="cmdText">Command Text, procedure or table name</param>
17+
/// <param name="cmdParms">Command Parameters (@parameter)</param>
18+
/// <returns>list of entities</returns>
19+
[System.Diagnostics.DebuggerStepThrough]
20+
public IEnumerable<T> LazyLoadForObjects<T>(
21+
CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null) where T : new()
22+
{
23+
return LazyLoadForObjects<T>(LazyLoad(cmdType, cmdText, cmdParms));
24+
}
25+
26+
/// <summary>
27+
/// LazyLoadForObjects Performs and returns the list loaded entities
28+
/// </summary>
29+
/// <typeparam name="T">type of entity returned</typeparam>
30+
/// <param name="dr">datareader loaded</param>
31+
/// <returns>list of entities</returns>
32+
[System.Diagnostics.DebuggerStepThrough]
33+
public static IEnumerable<T> LazyLoadForObjects<T>(IEnumerable<IDataReader> dr) where T : new()
34+
{
35+
Logger.Debug("Begin method");
36+
37+
Type entityType = typeof(T);
38+
var properties = CfMapCache.GetInstance(entityType);
39+
40+
using (var enumerator = dr.GetEnumerator())
41+
{
42+
while (enumerator.MoveNext())
43+
{
44+
var reader = enumerator.Current;
45+
46+
if (reader != null)
47+
{
48+
var newObject = new T();
49+
for (var index = 0; index < reader.FieldCount; index++)
50+
{
51+
if (properties.ContainsKey(reader.GetName(index).ToUpper()))
52+
{
53+
var info = properties[reader.GetName(index).ToUpper()];
54+
if ((info != null) && info.CanWrite && !reader.IsDBNull(index))
55+
{
56+
try
57+
{
58+
info.SetValue(newObject, reader.GetValue(index), null);
59+
}
60+
catch (Exception ex)
61+
{
62+
Logger.Error(ex);
63+
throw new CfException(String.Format("Conversion error in {0}.{1} - (Connection Factory: LazyLoadForObjects) > {2}", entityType.Name, reader.GetName(index), ex.Message), ex);
64+
}
65+
}
66+
}
67+
else
68+
{
69+
Logger.Debug("Property not exist: " + entityType.FullName + reader.GetName(index));
70+
}
71+
}
72+
yield return newObject;
73+
}
74+
}
75+
}
76+
Logger.Debug("End method");
77+
}
78+
79+
public IEnumerable<dynamic> LazyLoadForObjects(
80+
CfCommandType cmdType, string cmdText, IEnumerable<CfParameter> cmdParms = null)
81+
{
82+
return LazyLoadForObjects(LazyLoad(cmdType, cmdText, cmdParms));
83+
}
84+
85+
public static IEnumerable<dynamic> LazyLoadForObjects(IEnumerable<IDataReader> dr)
86+
{
87+
using (var enumerator = dr.GetEnumerator())
88+
{
89+
while (enumerator.MoveNext())
90+
{
91+
var reader = enumerator.Current;
92+
93+
if (reader != null)
94+
{
95+
yield return reader.ToExpando();
96+
}
97+
}
98+
}
99+
}
100+
101+
#endregion
102+
}
103+
}

0 commit comments

Comments
 (0)