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