Improved support for stored procedures invocation. Both typed and not typed. Also improved support for output arguments and added examples to docs.

This commit is contained in:
grzegorz.russek
2024-04-11 15:15:14 +02:00
parent 437403f966
commit be6c172ec8
6 changed files with 541 additions and 61 deletions

View File

@@ -12,9 +12,7 @@ namespace Tester
private static DynamicDatabase GetORM()
{
return new DynamicDatabase(System.Data.SqlClient.SqlClientFactory.Instance,
"packet size=4096;User Id=sa;Password=sa123;data source=127.0.0.1,1435;initial catalog=MOM_LANGOWSKI_WMS_TEST;",
//"packet size=4096;User Id=sa;Password=sa123;data source=192.168.1.9,1433;initial catalog=MOM_NEXT_Florentyna_WMS_PROD;",
//"packet size=4096;User Id=sa;Password=sa123;data source=127.0.0.1;initial catalog=DynamORM;",
"packet size=4096;User Id=sa;Password=;data source=192.168.22.;initial catalog=PLAYGROUND;",
DynamicDatabaseOptions.SingleConnection | DynamicDatabaseOptions.SingleTransaction | DynamicDatabaseOptions.SupportSchema |
DynamicDatabaseOptions.SupportStoredProcedures | DynamicDatabaseOptions.SupportTop | DynamicDatabaseOptions.DumpCommands);
@@ -31,6 +29,58 @@ namespace Tester
using (var db = GetORM())
{
db.Execute(@"CREATE OR ALTER PROCEDURE sp_Exp_Scalar AS SELECT 42;");
var res0 = db.Procedures.sp_Exp_Scalar();
var res1 = db.Procedures.sp_Exp_Scalar<int>();
db.Execute(@"CREATE OR ALTER PROCEDURE sp_Exp_ReturnInt AS RETURN 42;");
var res2 = db.Procedures.sp_Exp_ReturnInt();
db.Execute(@"CREATE OR ALTER PROCEDURE sp_Exp_SomeData AS
SELECT 1 Id, 'Some Name 1' [Name], 'Some Desc 1' [Desc], GETDATE() [Date]
UNION ALL SELECT 2 Id, 'Some Name 2', 'Some Desc 2', GETDATE() [Date];");
var res3 = db.Procedures.sp_Exp_SomeData<sp_Exp_SomeData_Result>();
var res4 = db.Procedures.sp_Exp_SomeData<List<sp_Exp_SomeData_Result>>();
db.Execute(@"CREATE OR ALTER PROCEDURE sp_Exp_SomeInputAndOutput
@Name nvarchar(50),
@Result nvarchar(256) OUTPUT
AS
SELECT @Result = 'Hi, ' + @Name + ' your lucky number is 42!';");
var res5 = db.Procedures.sp_Exp_SomeInputAndOutput<string, sp_Exp_SomeInputAndOutput_Result>(Name: "G4g4r1n", out_Result: new DynamicColumn
{
Schema = new DynamicSchemaColumn
{
Size = 256,
},
}, ret_Return: 0);
var res6 = db.Procedures.sp_Exp_SomeInputAndOutput<string, sp_Exp_SomeInputAndOutput_Result>(Name: "G4g4r1n", out_Result: new DynamicSchemaColumn
{
Size = 256,
}, ret_Return: 0);
db.Execute(@"CREATE OR ALTER PROCEDURE sp_Exp_SomeInputAndOutputWithDataAndReturn
@Name nvarchar(50),
@Result nvarchar(256) OUTPUT
AS
SELECT @Result = 'Hi, ' + @Name + ' your lucky number is 42!'
SELECT 1 Id, 'Some Name 1' [Name], 'Some Desc 1' [Desc], GETDATE() [Date]
UNION ALL SELECT 2 Id, 'Some Name 2', 'Some Desc 2', GETDATE() [Date]
RETURN 42;");
var res7 = db.Procedures.sp_Exp_SomeInputAndOutputWithDataAndReturn<List<sp_Exp_SomeInputAndOutputWithDataAndReturn_Result.Data>, sp_Exp_SomeInputAndOutputWithDataAndReturn_Result>(Name: "G4g4r1n", out_Result: new DynamicColumn
{
Schema = new DynamicSchemaColumn
{
Size = 256,
},
}, ret_Return: 0);
var res8 = db.Procedures.sp_Exp_SomeInputAndOutputWithDataAndReturn<List<sp_Exp_SomeInputAndOutputWithDataAndReturn_Result.Data>, sp_Exp_SomeInputAndOutputWithDataAndReturn_Result>(Name: "G4g4r1n", out_Result: new DynamicSchemaColumn
{
Size = 256,
}, ret_Return: 0);
//try
//{
// db.Execute("DROP TABLE Experiments ");
@@ -50,28 +100,50 @@ namespace Tester
//db.Execute("DROP TABLE Experiments ");
IDataReader rdr = db.Procedures.sp_getdate<IDataReader>();
var dt = rdr.ToDataTable();
var dt2 = db.Procedures.sp_getdate<DataTable>();
//IDataReader rdr = db.Procedures.sp_getdate<IDataReader>();
//var dt = rdr.ToDataTable();
//var dt2 = db.Procedures.sp_getdate<DataTable>();
db.Procedures.usp_API_Generate_Doc_Number<string>(key: Guid.NewGuid(), mdn_id: "ZZ");
//db.Procedures.usp_API_Generate_Doc_Number<string>(key: Guid.NewGuid(), mdn_id: "ZZ");
var resL = (db.Procedures.GetProductDesc<IList<GetProductDesc_Result>>() as IEnumerable<dynamic>)
.Cast<GetProductDesc_Result>()
.ToArray();
var res = db.Procedures.GetProductDesc_withparameters<GetProductDesc_Result>(PID: 707);
res = db.Procedures.GetProductDesc_withDefaultparameters<GetProductDesc_Result>();
//var resL = (db.Procedures.GetProductDesc<IList<GetProductDesc_Result>>() as IEnumerable<dynamic>)
// .Cast<GetProductDesc_Result>()
// .ToArray();
//var res = db.Procedures.GetProductDesc_withparameters<GetProductDesc_Result>(PID: 707);
//res = db.Procedures.GetProductDesc_withDefaultparameters<GetProductDesc_Result>();
int id = -1;
var resD = db.Procedures.ins_NewEmp_with_outputparamaters(Ename: "Test2", out_EId: id);
//int id = -1;
//var resD = db.Procedures.ins_NewEmp_with_outputparamaters(Ename: "Test2", out_EId: id);
}
}
private class GetProductDesc_Result
private class sp_Exp_SomeData_Result
{
public virtual int ProductID { get; set; }
public virtual string ProductName { get; set; }
public virtual string ProductDescription { get; set; }
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Desc { get; set; }
public virtual DateTime Date { get; set; }
}
private class sp_Exp_SomeInputAndOutput_Result
{
public virtual string Result { get; set; }
public virtual string Return { get; set; }
}
private class sp_Exp_SomeInputAndOutputWithDataAndReturn_Result
{
public class Data
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Desc { get; set; }
public virtual DateTime Date { get; set; }
}
public virtual List<Data> sp_Exp_SomeInputAndOutputWithDataAndReturn { get; set; }
public virtual string Result { get; set; }
public virtual string Return { get; set; }
}
}
}

View File

@@ -17,7 +17,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Data.Common" Version="4.3.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('net4')) AND '$(MSBuildRuntimeType)' == 'Core' AND '$(OS)' != 'Windows_NT'">
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="All" />