From 2c3223ac6ba17c0e61e0a340b706c2277bbf0e63 Mon Sep 17 00:00:00 2001
From: bicijinlian <bicijinlian@163.com>
Date: Wed, 11 Nov 2020 23:43:11 +0800
Subject: [PATCH] =?UTF-8?q?oledb=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 AccessStudy.Core/AccessStudy.Core.csproj      |   4 +-
 AccessStudy.Core/OdbcUtil.cs                  |   6 +-
 AccessStudy.Core/OledbUtil.cs                 |  34 ++---
 .../AccessStudy.CoreTest.csproj               |  19 ++-
 AccessStudy.CoreTest/OleDbUtilTest.cs         | 122 ++++++++++++++++++
 5 files changed, 159 insertions(+), 26 deletions(-)
 create mode 100644 AccessStudy.CoreTest/OleDbUtilTest.cs

diff --git a/AccessStudy.Core/AccessStudy.Core.csproj b/AccessStudy.Core/AccessStudy.Core.csproj
index ba3b4ab..6f11158 100644
--- a/AccessStudy.Core/AccessStudy.Core.csproj
+++ b/AccessStudy.Core/AccessStudy.Core.csproj
@@ -5,8 +5,8 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="System.Data.Odbc" Version="4.7.0" />
-    <PackageReference Include="System.Data.OleDb" Version="4.7.1" />
+    <PackageReference Include="System.Data.Odbc" Version="5.0.0" />
+    <PackageReference Include="System.Data.OleDb" Version="5.0.0" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/AccessStudy.Core/OdbcUtil.cs b/AccessStudy.Core/OdbcUtil.cs
index f084326..c2752e9 100644
--- a/AccessStudy.Core/OdbcUtil.cs
+++ b/AccessStudy.Core/OdbcUtil.cs
@@ -189,7 +189,7 @@ namespace AccessStudy.Core
 
                 if (parameters != null)
                 {
-                    command.Parameters.Add(parameters.ToArray());
+                    command.Parameters.AddRange(parameters.ToArray());
                 }
 
                 dataReader = command.ExecuteReader();
@@ -227,7 +227,7 @@ namespace AccessStudy.Core
 
                 if (parameters != null)
                 {
-                    command.Parameters.Add(parameters.ToArray());
+                    command.Parameters.AddRange(parameters.ToArray());
                 }
 
                 result = command.ExecuteScalar();
@@ -264,7 +264,7 @@ namespace AccessStudy.Core
 
                 if (parameters != null)
                 {
-                    command.Parameters.Add(parameters.ToArray());
+                    command.Parameters.AddRange(parameters.ToArray());
                 }
 
                 result = command.ExecuteNonQuery();
diff --git a/AccessStudy.Core/OledbUtil.cs b/AccessStudy.Core/OledbUtil.cs
index a245877..e993597 100644
--- a/AccessStudy.Core/OledbUtil.cs
+++ b/AccessStudy.Core/OledbUtil.cs
@@ -6,7 +6,7 @@ using System.Text;
 
 namespace AccessStudy.Core
 {
-    public class OledbUtil:IDisposable
+    public class OledbUtil : IDisposable
     {
         public OleDbConnection DbConnection { get; set; }
 
@@ -18,7 +18,7 @@ namespace AccessStudy.Core
         }
 
         public OledbUtil(string connetString)
-        { 
+        {
             DbConnection = new OleDbConnection(connetString);
         }
 
@@ -72,7 +72,7 @@ namespace AccessStudy.Core
 
                 adapter.Fill(dataSet);
             }
-            catch(Exception ex)
+            catch (Exception ex)
             {
                 Console.WriteLine(ex.Message);
             }
@@ -87,7 +87,7 @@ namespace AccessStudy.Core
         /// <summary>
         /// 获取DataSet
         /// </summary>
-        public DataSet GetDataSet(string sqlText, List<OleDbParameter> parameters=null)
+        public DataSet GetDataSet(string sqlText, List<OleDbParameter> parameters = null)
         {
             DataSet dataSet = new DataSet();
             try
@@ -100,11 +100,11 @@ namespace AccessStudy.Core
                     CommandText = sqlText,
                 };
 
-                if (parameters !=null)
-                { 
+                if (parameters != null)
+                {
                     command.Parameters.AddRange(parameters.ToArray());
                 }
-                
+
                 var adapter = new OleDbDataAdapter(command);
 
                 adapter.Fill(dataSet);
@@ -133,9 +133,9 @@ namespace AccessStudy.Core
         /// <summary>
         /// 获取DataTable
         /// </summary>
-        public DataTable GetDataTable(string sqlText, List<OleDbParameter> parameters=null)
+        public DataTable GetDataTable(string sqlText, List<OleDbParameter> parameters = null)
         {
-            DataSet dataSet = GetDataSet(sqlText,parameters);
+            DataSet dataSet = GetDataSet(sqlText, parameters);
             return dataSet.Tables[0];
         }
 
@@ -175,7 +175,7 @@ namespace AccessStudy.Core
         /// 获取DataReader
         /// 切记:用完之后主动关闭连接
         /// </summary>
-        public OleDbDataReader GetDataReader(string sqlText, List<OleDbParameter> parameters=null)
+        public OleDbDataReader GetDataReader(string sqlText, List<OleDbParameter> parameters = null)
         {
             OleDbDataReader dataReader = null;
             try
@@ -185,12 +185,12 @@ namespace AccessStudy.Core
                 {
                     Connection = DbConnection,
                     CommandType = CommandType.Text,
-                    CommandText =sqlText,
+                    CommandText = sqlText,
                 };
 
                 if (parameters != null)
                 {
-                    command.Parameters.Add(parameters.ToArray());
+                    command.Parameters.AddRange(parameters.ToArray());
                 }
 
                 dataReader = command.ExecuteReader();
@@ -212,7 +212,7 @@ namespace AccessStudy.Core
         /// 获取第一行第一列的值
         /// 不存在则为null
         /// </summary>
-        public object GetScalar(string sqlText, List<OleDbParameter> parameters=null)
+        public object GetScalar(string sqlText, List<OleDbParameter> parameters = null)
         {
             object result = null;
 
@@ -228,14 +228,14 @@ namespace AccessStudy.Core
 
                 if (parameters != null)
                 {
-                    command.Parameters.Add(parameters.ToArray());
+                    command.Parameters.AddRange(parameters.ToArray());
                 }
 
                 result = command.ExecuteScalar();
             }
             catch (Exception ex)
             {
-               throw ex;
+                throw ex;
             }
             finally
             {
@@ -265,7 +265,7 @@ namespace AccessStudy.Core
 
                 if (parameters != null)
                 {
-                    command.Parameters.Add(parameters.ToArray());
+                    command.Parameters.AddRange(parameters.ToArray());
                 }
 
                 result = command.ExecuteNonQuery();
@@ -306,7 +306,7 @@ namespace AccessStudy.Core
 
         public void Dispose()
         {
-            if (DbConnection.State==ConnectionState.Open)
+            if (DbConnection.State == ConnectionState.Open)
             {
                 DbConnection.Close();
             }
diff --git a/AccessStudy.CoreTest/AccessStudy.CoreTest.csproj b/AccessStudy.CoreTest/AccessStudy.CoreTest.csproj
index 5b1791f..e60efe2 100644
--- a/AccessStudy.CoreTest/AccessStudy.CoreTest.csproj
+++ b/AccessStudy.CoreTest/AccessStudy.CoreTest.csproj
@@ -7,10 +7,21 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
-    <PackageReference Include="xunit" Version="2.4.0" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
-    <PackageReference Include="coverlet.collector" Version="1.2.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.0" />
+    <PackageReference Include="Shouldly" Version="4.0.0" />
+    <PackageReference Include="xunit" Version="2.4.1" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="coverlet.collector" Version="1.3.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\AccessStudy.Core\AccessStudy.Core.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/AccessStudy.CoreTest/OleDbUtilTest.cs b/AccessStudy.CoreTest/OleDbUtilTest.cs
new file mode 100644
index 0000000..16dbeb9
--- /dev/null
+++ b/AccessStudy.CoreTest/OleDbUtilTest.cs
@@ -0,0 +1,122 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Xunit;
+
+using Shouldly;
+using Shouldly.Configuration;
+using Shouldly.ShouldlyExtensionMethods;
+
+using AccessStudy.Core;
+using System.Data.OleDb;
+
+namespace AccessStudy.CoreTest
+{
+    public class OleDbUtilTest:IDisposable
+    {
+
+        private readonly OledbUtil _dbUtil;
+        public OleDbUtilTest()
+        {
+            _dbUtil = new OledbUtil();
+        }
+
+        [Fact]
+        public void DbUtil_NotNull_Test()
+        {
+            Assert.NotNull(_dbUtil);
+        }
+
+        [Fact]
+        public void DbConnet_Test()
+        {
+            var con = _dbUtil.DbConnection;
+            Assert.NotNull(con);
+
+            Action action = () => 
+            { 
+                con.Open();
+                con.Close();
+                con.Dispose();
+
+                //throw new Exception("特意抛出的异常!");
+            };
+
+            Should.NotThrow(action);
+        }
+
+        [Fact]
+        public void DataSet_Test()
+        {
+            var ds = _dbUtil.GetDataSet("Student");
+
+            Assert.NotNull(ds);
+
+            Assert.NotNull(ds.Tables);
+
+            Assert.True(ds.Tables.Count>0);
+        }
+
+        [Fact]
+        public void DataTable_Test()
+        {
+            var dt = _dbUtil.GetDataTable("Student");
+            Assert.NotNull(dt);
+        }
+
+        [Fact]
+        public void DataReader_Test()
+        {
+            Action action = () => 
+            {
+                var dataReader = _dbUtil.GetDataReader("Student");
+                while (dataReader.Read())
+                {
+                    break;
+                }
+
+                dataReader.Close();
+            };
+
+            Should.NotThrow(action);
+        }
+
+
+        [Fact]
+        public void Scalar_Test()
+        {
+            var sqlText = @"select count(*) as Total from Student where Age>@Age;";
+            List<OleDbParameter> paras = new List<OleDbParameter>()
+            {
+                new OleDbParameter("Age",1),
+            };
+
+            var total = (int)_dbUtil.GetScalar(sqlText, paras);
+
+            Assert.True(total >= 0);
+        }
+
+        
+        [Fact]
+        public void NonQuery_Test()
+        {
+            var sqlText = @"update Student Set Age=Age+1 where Age>@Age and Name <>@Name;";
+            List<OleDbParameter> paras = new List<OleDbParameter>()
+            {
+                new OleDbParameter("Age",1),
+                new OleDbParameter("Name","王高峰"),
+            };
+
+            var total = _dbUtil.ExecuteNonQuery(sqlText, paras);
+
+            Assert.True(total >= 0);
+        }
+
+
+
+        public void Dispose()
+        {
+        }
+    }
+}