Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
Dapper
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tsai
Dapper
Commits
047eef9f
Commit
047eef9f
authored
Apr 05, 2011
by
Sam Saffron
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added execute command
parent
53e7f518
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
96 additions
and
56 deletions
+96
-56
SqlMapper.cs
SqlMapper.cs
+83
-55
Tests.cs
Tests.cs
+13
-1
No files found.
SqlMapper.cs
View file @
047eef9f
...
...
@@ -109,33 +109,28 @@ public bool Equals(Identity other)
static
Dictionary
<
Type
,
SqlDbType
>
typeMap
;
/// <summary>
/// Execute parameterized SQL
/// </summary>
/// <returns>Number of rows affected</returns>
public
static
int
ExecuteMapperCommand
(
this
IDbConnection
cnn
,
string
sql
,
object
param
=
null
,
SqlTransaction
transaction
=
null
)
{
return
ExecuteCommand
(
cnn
,
transaction
,
sql
,
GetParamInfo
(
param
));
}
public
static
List
<
dynamic
>
ExecuteMapperQuery
(
this
IDbConnection
cnn
,
string
sql
,
object
param
=
null
,
SqlTransaction
transaction
=
null
)
{
// TODO: get rid of casting hackery
return
ExecuteMapperQuery
<
ExpandoObject
>(
cnn
,
sql
,
param
,
transaction
).
Select
(
s
=>
s
as
dynamic
).
ToList
();
}
public
static
List
<
T
>
ExecuteMapperQuery
<
T
>(
this
IDbConnection
cnn
,
string
sql
,
object
param
=
null
,
SqlTransaction
transaction
=
null
)
{
var
identity
=
new
Identity
(
sql
,
typeof
(
T
));
var
rval
=
new
List
<
T
>();
Func
<
object
,
List
<
ParamInfo
>>
paramInfoGenerator
;
List
<
ParamInfo
>
paramInfo
=
null
;
if
(
param
!=
null
)
{
if
(!
cachedParamReaders
.
TryGetValue
(
param
.
GetType
(),
out
paramInfoGenerator
))
{
paramInfoGenerator
=
CreateParamInfoGenerator
(
param
.
GetType
());
cachedParamReaders
[
param
.
GetType
()]
=
paramInfoGenerator
;
}
paramInfo
=
paramInfoGenerator
(
param
);
}
using
(
var
reader
=
GetReader
<
T
>(
cnn
,
transaction
,
sql
,
paramInfo
))
using
(
var
reader
=
GetReader
(
cnn
,
transaction
,
sql
,
GetParamInfo
(
param
)))
{
object
oDeserializer
;
if
(!
cachedSerializers
.
TryGetValue
(
identity
,
out
oDeserializer
))
...
...
@@ -167,6 +162,24 @@ public static List<T> ExecuteMapperQuery<T>(this IDbConnection cnn, string sql,
return
rval
;
}
private
static
List
<
ParamInfo
>
GetParamInfo
(
object
param
)
{
Func
<
object
,
List
<
ParamInfo
>>
paramInfoGenerator
;
List
<
ParamInfo
>
paramInfo
=
null
;
if
(
param
!=
null
)
{
if
(!
cachedParamReaders
.
TryGetValue
(
param
.
GetType
(),
out
paramInfoGenerator
))
{
paramInfoGenerator
=
CreateParamInfoGenerator
(
param
.
GetType
());
cachedParamReaders
[
param
.
GetType
()]
=
paramInfoGenerator
;
}
paramInfo
=
paramInfoGenerator
(
param
);
}
return
paramInfo
;
}
private
static
object
GetDynamicDeserializer
(
IDataReader
reader
)
{
List
<
string
>
colNames
=
new
List
<
string
>();
...
...
@@ -228,11 +241,10 @@ private static object GetDynamicDeserializer(IDataReader reader)
return
(
Func
<
object
,
List
<
ParamInfo
>>)
dm
.
CreateDelegate
(
typeof
(
Func
<
object
,
List
<
ParamInfo
>>));
}
private
static
IDataReader
GetReader
<
T
>(
IDbConnection
cnn
,
SqlTransaction
tranaction
,
string
sql
,
List
<
ParamInfo
>
paramInfo
)
{
using
(
var
cmd
=
cnn
.
CreateCommand
())
private
static
IDbCommand
SetupCommand
(
IDbConnection
cnn
,
SqlTransaction
tranaction
,
string
sql
,
List
<
ParamInfo
>
paramInfo
)
{
var
cmd
=
cnn
.
CreateCommand
();
cmd
.
Transaction
=
tranaction
;
cmd
.
CommandText
=
sql
;
if
(
paramInfo
!=
null
)
...
...
@@ -282,6 +294,22 @@ private static IDataReader GetReader<T>(IDbConnection cnn, SqlTransaction tranac
}
}
}
return
cmd
;
}
private
static
int
ExecuteCommand
(
IDbConnection
cnn
,
SqlTransaction
tranaction
,
string
sql
,
List
<
ParamInfo
>
paramInfo
)
{
using
(
var
cmd
=
SetupCommand
(
cnn
,
tranaction
,
sql
,
paramInfo
))
{
return
cmd
.
ExecuteNonQuery
();
}
}
private
static
IDataReader
GetReader
(
IDbConnection
cnn
,
SqlTransaction
tranaction
,
string
sql
,
List
<
ParamInfo
>
paramInfo
)
{
using
(
var
cmd
=
SetupCommand
(
cnn
,
tranaction
,
sql
,
paramInfo
))
{
return
cmd
.
ExecuteReader
();
}
}
...
...
Tests.cs
View file @
047eef9f
...
...
@@ -123,5 +123,17 @@ public void TestStringList()
.
IsSequenceEqual
(
new
[]
{
"a"
,
"b"
,
"c"
});
}
public
void
TestExecuteCommand
()
{
connection
.
ExecuteMapperCommand
(
@"
set nocount on
create table #t(i int)
set nocount off
insert #t
select @a a union all select @b
set nocount on
drop table #t"
,
new
{
a
=
1
,
b
=
2
}).
IsEquals
(
2
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment