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

Commit 1c77b49

Browse files
committed
Add DefaultStringLength as the default size for String db params
1 parent 5b0d0fb commit 1c77b49

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using System.Data;
2+
using NUnit.Framework;
3+
using ServiceStack.DataAnnotations;
4+
5+
namespace ServiceStack.OrmLite.SqlServerTests
6+
{
7+
public class LetterFrequency
8+
{
9+
[AutoIncrement]
10+
public int Id { get; set; }
11+
12+
public string Letter { get; set; }
13+
}
14+
15+
[TestFixture]
16+
public class CustomSqlTests : OrmLiteTestBase
17+
{
18+
private const string DropProcedureSql = @"
19+
IF OBJECT_ID('spSearchLetters') IS NOT NULL
20+
DROP PROCEDURE spSearchLetters";
21+
22+
private const string CreateProcedureSql = @"
23+
CREATE PROCEDURE spSearchLetters
24+
(
25+
@pLetter varchar(10),
26+
@pTotal int OUT
27+
)
28+
AS
29+
BEGIN
30+
SELECT @pTotal = COUNT(*) FROM LetterFrequency WHERE Letter = @pLetter
31+
SELECT * FROM LetterFrequency WHERE Letter = @pLetter
32+
END";
33+
34+
[Test]
35+
public void Can_execute_stored_procedure_using_SqlList_with_out_params()
36+
{
37+
using (var db = OpenDbConnection())
38+
{
39+
db.DropAndCreateTable<LetterFrequency>();
40+
41+
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
42+
db.InsertAll(rows);
43+
44+
db.ExecuteSql(DropProcedureSql);
45+
db.ExecuteSql(CreateProcedureSql);
46+
47+
IDbDataParameter pTotal = null;
48+
var results = db.SqlList<LetterFrequency>("spSearchLetters",
49+
cmd =>
50+
{
51+
cmd.CommandType = CommandType.StoredProcedure;
52+
cmd.AddParam("pLetter", "C");
53+
pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
54+
});
55+
56+
Assert.That(results.Count, Is.EqualTo(3));
57+
Assert.That(pTotal.Value, Is.EqualTo("3"));
58+
}
59+
}
60+
61+
[Test]
62+
public void Can_execute_stored_procedure_using_SqlProc_with_out_params()
63+
{
64+
using (var db = OpenDbConnection())
65+
{
66+
db.DropAndCreateTable<LetterFrequency>();
67+
68+
var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });
69+
db.InsertAll(rows);
70+
71+
db.ExecuteSql(DropProcedureSql);
72+
db.ExecuteSql(CreateProcedureSql);
73+
74+
var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" });
75+
var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
76+
var results = cmd.ConvertToList<LetterFrequency>();
77+
78+
Assert.That(results.Count, Is.EqualTo(3));
79+
Assert.That(pTotal.Value, Is.EqualTo("3"));
80+
}
81+
}
82+
}
83+
}

src/ServiceStack.OrmLite.SqlServerTests/ServiceStack.OrmLite.SqlServerTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
<Compile Include="..\GlobalAssemblyInfo.cs">
7575
<Link>Properties\GlobalAssemblyInfo.cs</Link>
7676
</Compile>
77+
<Compile Include="CustomSqlTests.cs" />
7778
<Compile Include="Datetime2Tests.cs" />
7879
<Compile Include="DateTimeOffsetTests.cs" />
7980
<Compile Include="EnsureUtcTest.cs" />

src/ServiceStack.OrmLite/OrmLiteReadCommandExtensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,10 @@ public static IDbDataParameter CreateParam(this IDbCommand dbCmd,
908908
}
909909
if (dbType != null)
910910
p.DbType = dbType.Value;
911+
912+
if (p.DbType == DbType.String)
913+
p.Size = dialectProvider.DefaultStringLength;
914+
911915
return p;
912916
}
913917

0 commit comments

Comments
 (0)