Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 46e1f96

Browse files
committed
Change SetParams to execute SqlExpression params before cloning them
1 parent 0287cc9 commit 46e1f96

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,14 +1789,12 @@ public static IDbDataParameter CreateParam(this IDbConnection db,
17891789
{
17901790
var dialectProvider = db.GetDialectProvider();
17911791

1792-
var to = new OrmLiteDataParameter
1793-
{
1794-
ParameterName = dialectProvider.GetParam(name),
1795-
Value = value,
1796-
};
1792+
var to = dialectProvider.CreateParam();
1793+
1794+
to.ParameterName = dialectProvider.GetParam(name);
1795+
to.Value = value;
17971796

17981797
var valueType = value != null ? value.GetType() : typeof(string);
1799-
to.IsNullable = isNullable.GetValueOrDefault(value == null || !valueType.IsNullableType());
18001798

18011799
if (precision != null)
18021800
to.Precision = precision.Value;

src/ServiceStack.OrmLite/OrmLiteResultsFilterExtensions.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,27 @@ internal static IDbCommand SetParameters(this IDbCommand dbCmd, IEnumerable<IDbD
139139
if (sqlParams == null)
140140
return dbCmd;
141141

142-
dbCmd.Parameters.Clear();
143-
144-
foreach (var sqlParam in sqlParams)
142+
try
143+
{
144+
dbCmd.Parameters.Clear();
145+
foreach (var sqlParam in sqlParams)
146+
{
147+
dbCmd.Parameters.Add(sqlParam);
148+
}
149+
}
150+
catch (Exception ex)
145151
{
146-
var p = dbCmd.CreateParameter();
147-
p.PopulateWith(sqlParam);
148-
dbCmd.Parameters.Add(p);
152+
//SQL Server + PostgreSql doesn't allow re-using db params in multiple queries
153+
if (Log.IsDebugEnabled)
154+
Log.Debug("Exception trying to reuse db params, executing with cloned params instead", ex);
155+
156+
dbCmd.Parameters.Clear();
157+
foreach (var sqlParam in sqlParams)
158+
{
159+
var p = dbCmd.CreateParameter();
160+
p.PopulateWith(sqlParam);
161+
dbCmd.Parameters.Add(p);
162+
}
149163
}
150164

151165
return dbCmd;

0 commit comments

Comments
 (0)