diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 95c66ef..b683e92 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -8,9 +8,7 @@ on:
jobs:
build:
-
runs-on: windows-2019
-
steps:
- uses: actions/checkout@v3
@@ -71,7 +69,10 @@ jobs:
# files: |
# dist/*.nupkg
# dist/*.snupkg
-
+ publish:
+ runs-on: windows-2019
+ if: github.ref == 'refs/heads/master'
+ steps:
- name: Publish
run: |
foreach ($file in (Get-ChildItem dist/*.nupkg) ) {
diff --git a/ACUtils.SqlDb/ACUtils.SqlDb.csproj b/ACUtils.SqlDb/ACUtils.SqlDb.csproj
index bf2de0a..28e2ad7 100644
--- a/ACUtils.SqlDb/ACUtils.SqlDb.csproj
+++ b/ACUtils.SqlDb/ACUtils.SqlDb.csproj
@@ -5,8 +5,8 @@
Andrea Cattaneo
true
false
- 1.0.0.149
- 1.0.0.149
+ 1.0.0.150
+ 1.0.0.150
Utility per interrogazione database MSSQL
it
true
diff --git a/ACUtils.SqlDb/SqlDb_QueryDictionary.cs b/ACUtils.SqlDb/SqlDb_QueryDictionary.cs
new file mode 100644
index 0000000..3f2eed2
--- /dev/null
+++ b/ACUtils.SqlDb/SqlDb_QueryDictionary.cs
@@ -0,0 +1,69 @@
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+
+namespace ACUtils
+{
+ public static class SqlDb_QueryDictionary
+ {
+ #region static without params
+ public static Dictionary QueryDictionary(SqlConnection connection, string queryString, string keyField = "key", string valueField = "value")
+ {
+ return QueryDictionary(connection, queryString, keyField, valueField, new KeyValuePair[0]);
+ }
+ #endregion
+ #region static with simple params
+ public static Dictionary QueryDictionary(SqlConnection connection, string queryString, string keyField = "key", string valueField = "value", params KeyValuePair[] queryParams)
+ {
+ return _return(
+ SqlDb_QueryDataTable.QueryDataTable(connection, queryString, queryParams),
+ keyField,
+ valueField
+ );
+ }
+ #endregion
+ #region static with typed params
+ public static Dictionary QueryDictionary(SqlConnection connection, string queryString, string keyField = "key", string valueField = "value", params KeyValuePair>[] queryParams)
+ {
+ return _return(
+ SqlDb_QueryDataTable.QueryDataTable(connection, queryString, queryParams),
+ keyField,
+ valueField
+ );
+ }
+ #endregion
+
+ #region without params
+ public static Dictionary QueryDictionary(this SqlDb self, string queryString, string keyField = "key", string valueField = "value")
+ {
+ return self.QueryDictionary(queryString, keyField, valueField, new KeyValuePair[0]);
+ }
+ #endregion
+ #region with simple params
+ public static Dictionary QueryDictionary(this SqlDb self, string queryString, string keyField = "key", string valueField = "value", params KeyValuePair[] queryParams)
+ {
+ return _return(
+ self.QueryDataTable(queryString, queryParams),
+ keyField,
+ valueField
+ );
+ }
+ #endregion
+ #region whit typed params
+ public static Dictionary QueryDictionary(this SqlDb self, string queryString, string keyField = "key", string valueField = "value", params KeyValuePair>[] queryParams)
+ {
+ return _return(
+ self.QueryDataTable(queryString, queryParams),
+ keyField,
+ valueField
+ );
+ }
+ #endregion
+
+ private static Dictionary _return(DataTable dt, string keyField, string valueField)
+ {
+ return dt.AsEnumerable().ToDictionary(d => d.Field(keyField), d => d.Field(valueField));
+ }
+ }
+}
diff --git a/Tests/SqlDbTest.cs b/Tests/SqlDbTest.cs
index 7912624..4f41f38 100644
--- a/Tests/SqlDbTest.cs
+++ b/Tests/SqlDbTest.cs
@@ -1,7 +1,10 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Transactions;
+
using ACUtils;
+
using NUnit.Framework;
namespace Tests
@@ -11,7 +14,7 @@ class SqlDbTest
{
private TransactionScope scope;
private SqlDb db;
- private string CONNECTION_STRING = "Data Source=(local);Initial Catalog=master;Integrated Security=SSPI;";
+ private string CONNECTION_STRING => System.Environment.GetEnvironmentVariable("ACUTILS_TEST_CONNECTION_STRING") ?? "Data Source=(local);Initial Catalog=master;Integrated Security=SSPI;";
[SetUp]
public void Setup()
@@ -45,7 +48,7 @@ public void TestSelect(string value)
);
SqlDb.MissingSchemaAction = System.Data.MissingSchemaAction.Add;
-
+
db.QueryDataRow(
"SELECT @a AS A",
"@a".WithValue(value, 3)
@@ -129,5 +132,28 @@ public void TestSelectNullableInt(int? value)
Assert.AreEqual(expected, result);
}
+ [Test]
+ public void TestQueryDictionary()
+ {
+ var sqlQuery = "SELECT BusinessEntityID, ISNULL(FirstName + ' ', '') + ISNULL(MiddleName + ' ','') + ISNULL(LastName, '') AS [FullName] FROM Person.Person";
+ var keyField = "BusinessEntityID";
+ var valueField = "FullName";
+ var count = db.QuerySingleValue("SELECT COUNT(*) FROM Person.Person");
+ Dictionary result;
+
+ using (var connection = new System.Data.SqlClient.SqlConnection(CONNECTION_STRING))
+ {
+ result = SqlDb_QueryDictionary.QueryDictionary(connection, sqlQuery, keyField, valueField);
+ }
+ Assert.AreEqual(count, result.Count);
+ Assert.AreEqual(result[285], "Syed E Abbas");
+ Assert.AreEqual(result[8722], "Sara Blue");
+
+ result = db.QueryDictionary(sqlQuery, keyField, valueField);
+ Assert.AreEqual(count, result.Count);
+ Assert.AreEqual(result[285], "Syed E Abbas");
+ Assert.AreEqual(result[8722], "Sara Blue");
+ }
+
}
}
diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj
index 40ef8e8..9e7318e 100644
--- a/Tests/Tests.csproj
+++ b/Tests/Tests.csproj
@@ -114,7 +114,7 @@
3.13.2
- 4.1.0
+ 4.3.1