1
1
using System ;
2
- using System . Collections . Generic ;
3
2
using System . Data ;
4
3
using System . Data . Common ;
5
- using System . Reflection ;
6
4
using NHibernate . SqlTypes ;
5
+ using NHibernate . Util ;
7
6
8
7
namespace NHibernate . Driver
9
8
{
@@ -12,6 +11,11 @@ namespace NHibernate.Driver
12
11
/// </summary>
13
12
public class SqlServerCeDriver : ReflectionBasedDriver
14
13
{
14
+ private static readonly Action < object , SqlDbType > SetSqlDbType =
15
+ DelegateHelper . BuildPropertySetter < SqlDbType > (
16
+ ReflectHelper . TypeFromAssembly ( "System.Data.SqlServerCe.SqlCeParameter" , "System.Data.SqlServerCe" , true ) ,
17
+ "SqlDbType" ) ;
18
+
15
19
/// <summary>
16
20
/// Initializes a new instance of the <see cref="SqlServerCeDriver"/> class.
17
21
/// </summary>
@@ -23,19 +27,6 @@ public SqlServerCeDriver()
23
27
{
24
28
}
25
29
26
- private PropertyInfo dbParamSqlDbTypeProperty ;
27
-
28
- public override void Configure ( IDictionary < string , string > settings )
29
- {
30
- base . Configure ( settings ) ;
31
-
32
- using ( var cmd = CreateCommand ( ) )
33
- {
34
- var dbParam = cmd . CreateParameter ( ) ;
35
- dbParamSqlDbTypeProperty = dbParam . GetType ( ) . GetProperty ( "SqlDbType" ) ;
36
- }
37
- }
38
-
39
30
/// <summary>
40
31
/// MsSql requires the use of a Named Prefix in the SQL statement.
41
32
/// </summary>
@@ -109,11 +100,11 @@ private void AdjustDbParamTypeForLargeObjects(DbParameter dbParam, SqlType sqlTy
109
100
{
110
101
if ( sqlType is BinaryBlobSqlType )
111
102
{
112
- dbParamSqlDbTypeProperty . SetValue ( dbParam , SqlDbType . Image , null ) ;
103
+ SetSqlDbType ( dbParam , SqlDbType . Image ) ;
113
104
}
114
105
else if ( sqlType is StringClobSqlType )
115
106
{
116
- dbParamSqlDbTypeProperty . SetValue ( dbParam , SqlDbType . NText , null ) ;
107
+ SetSqlDbType ( dbParam , SqlDbType . NText ) ;
117
108
}
118
109
}
119
110
0 commit comments