NewLife/X

新增DbTable.WriteRow,支持写入单行数据
智能大石头 authored at 2025-07-15 18:46:28
102c886
Tree
1 Parent(s) 01d3f93
Summary: 1 changed files with 52 additions and 38 deletions.
Modified +52 -38
Modified +52 -38
diff --git a/NewLife.Core/Data/DbTable.cs b/NewLife.Core/Data/DbTable.cs
index a4301dc..1860f0c 100644
--- a/NewLife.Core/Data/DbTable.cs
+++ b/NewLife.Core/Data/DbTable.cs
@@ -403,38 +403,38 @@ public class DbTable : IEnumerable<DbRow>, ICloneable, IAccessor
     }
 
     /// <summary>写入头部到数据流</summary>
-    /// <param name="bn">二进制序列化器</param>
-    public void WriteHeader(Binary bn)
+    /// <param name="binary">二进制序列化器</param>
+    public void WriteHeader(Binary binary)
     {
         var cs = Columns ?? throw new ArgumentNullException(nameof(Columns));
         var ts = Types ?? throw new ArgumentNullException(nameof(Types));
 
         // 头部,幻数、版本和标记
         var buf = MAGIC.GetBytes();
-        bn.Write(buf, 0, buf.Length);
-        bn.Write(_Ver);
-        bn.Write(0);
+        binary.Write(buf, 0, buf.Length);
+        binary.Write(_Ver);
+        binary.Write(0);
 
         // 写入头部
         var count = cs.Length;
-        bn.Write(count);
+        binary.Write(count);
         for (var i = 0; i < count; i++)
         {
-            bn.Write(cs[i]);
+            binary.Write(cs[i]);
 
             // 复杂类型写入类型字符串
             var code = ts[i].GetTypeCode();
-            bn.Write((Byte)code);
-            if (code == TypeCode.Object) bn.Write(ts[i].FullName);
+            binary.Write((Byte)code);
+            if (code == TypeCode.Object) binary.Write(ts[i].FullName);
         }
 
         // 数据行数
-        bn.Write(Total.GetBytes(), 0, 4);
+        binary.Write(Total.GetBytes(), 0, 4);
     }
 
     /// <summary>写入数据部分到数据流</summary>
-    /// <param name="bn">二进制序列化器</param>
-    public void WriteData(Binary bn)
+    /// <param name="binary">二进制序列化器</param>
+    public void WriteData(Binary binary)
     {
         var ts = Types ?? throw new ArgumentNullException(nameof(Types));
         var rs = Rows;
@@ -445,15 +445,15 @@ public class DbTable : IEnumerable<DbRow>, ICloneable, IAccessor
         {
             for (var i = 0; i < row.Length; i++)
             {
-                bn.Write(row[i], ts[i]);
+                binary.Write(row[i], ts[i]);
             }
         }
     }
 
     /// <summary>写入数据部分到数据流</summary>
-    /// <param name="bn">二进制序列化器</param>
+    /// <param name="binary">二进制序列化器</param>
     /// <param name="fields">要写入的字段序列</param>
-    public void WriteData(Binary bn, Int32[] fields)
+    public void WriteData(Binary binary, Int32[] fields)
     {
         var ts = Types ?? throw new ArgumentNullException(nameof(Types));
         var rs = Rows;
@@ -467,19 +467,19 @@ public class DbTable : IEnumerable<DbRow>, ICloneable, IAccessor
                 // 找到目标顺序,实际上几乎不可能出现-1
                 var idx = fields[i];
                 if (idx >= 0)
-                    bn.Write(row[idx], ts[idx]);
+                    binary.Write(row[idx], ts[idx]);
                 else
-                    bn.Write(null, ts[idx]);
+                    binary.Write(null, ts[idx]);
             }
         }
     }
 
     /// <summary>使用迭代器模式写入数据。调用方可以一边处理数据一边写入</summary>
-    /// <param name="bn">二进制序列化器</param>
+    /// <param name="binary">二进制序列化器</param>
     /// <param name="rows">数据源</param>
     /// <param name="fields">要写入的字段序列</param>
     /// <exception cref="ArgumentNullException"></exception>
-    public Int32 WriteRows(Binary bn, IEnumerable<Object?[]> rows, Int32[]? fields = null)
+    public Int32 WriteRows(Binary binary, IEnumerable<Object?[]> rows, Int32[]? fields = null)
     {
         if (rows == null) throw new ArgumentNullException(nameof(rows));
         var ts = Types ?? throw new ArgumentNullException(nameof(Types));
@@ -488,25 +488,7 @@ public class DbTable : IEnumerable<DbRow>, ICloneable, IAccessor
         var count = 0;
         foreach (var row in rows)
         {
-            if (fields == null)
-            {
-                for (var i = 0; i < row.Length; i++)
-                {
-                    bn.Write(row[i], ts[i]);
-                }
-            }
-            else
-            {
-                for (var i = 0; i < fields.Length; i++)
-                {
-                    // 找到目标顺序,实际上几乎不可能出现-1
-                    var idx = fields[i];
-                    if (idx >= 0)
-                        bn.Write(row[idx], ts[idx]);
-                    else
-                        bn.Write(null, ts[idx]);
-                }
-            }
+            WriteRow(binary, row, fields);
 
             count++;
         }
@@ -514,6 +496,38 @@ public class DbTable : IEnumerable<DbRow>, ICloneable, IAccessor
         return count;
     }
 
+    /// <summary>写入一行数据</summary>
+    /// <param name="binary"></param>
+    /// <param name="row"></param>
+    /// <param name="fields"></param>
+    /// <exception cref="ArgumentNullException"></exception>
+    public void WriteRow(Binary binary, Object?[] row, Int32[]? fields = null)
+    {
+        if (row == null) throw new ArgumentNullException(nameof(row));
+        var ts = Types ?? throw new ArgumentNullException(nameof(Types));
+
+        // 写入数据
+        if (fields == null)
+        {
+            for (var i = 0; i < row.Length; i++)
+            {
+                binary.Write(row[i], ts[i]);
+            }
+        }
+        else
+        {
+            for (var i = 0; i < fields.Length; i++)
+            {
+                // 找到目标顺序,实际上几乎不可能出现-1
+                var idx = fields[i];
+                if (idx >= 0)
+                    binary.Write(row[idx], ts[idx]);
+                else
+                    binary.Write(null, ts[idx]);
+            }
+        }
+    }
+
     /// <summary>转数据包</summary>
     /// <returns></returns>
     public IPacket ToPacket()