要使用ADO.NET DataSet和DataAdapter将树结构持久化到具有自动递增ID的数据库表,请按照以下步骤操作:
以下是一个示例代码:
using System;
using System.Data;
using System.Data.SqlClient;
public class TreeNode
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
public TreeNode[] Children { get; set; }
}
public class TreePersistence
{
private DataSet _dataSet;
private DataTable _treeTable;
private SqlConnection _connection;
public TreePersistence(string connectionString)
{
_connection = new SqlConnection(connectionString);
_connection.Open();
_dataSet = new DataSet();
_treeTable = _dataSet.Tables.Add("Tree");
_treeTable.Columns.Add("Id", typeof(int)).AutoIncrement = true;
_treeTable.Columns.Add("ParentId", typeof(int));
_treeTable.Columns.Add("Name", typeof(string));
var adapter = new SqlDataAdapter("SELECT * FROM Tree", _connection);
adapter.Fill(_treeTable);
}
public void SaveTree(TreeNode root)
{
SaveTreeNode(root, null);
var adapter = new SqlDataAdapter();
adapter.InsertCommand = new SqlCommand("INSERT INTO Tree (ParentId, Name) VALUES (@ParentId, @Name)", _connection);
adapter.InsertCommand.Parameters.Add("@ParentId", SqlDbType.Int);
adapter.InsertCommand.Parameters.Add("@Name", SqlDbType.NVarChar);
var builder = new SqlCommandBuilder(adapter);
adapter.Update(_treeTable);
}
private void SaveTreeNode(TreeNode node, int? parentId)
{
node.ParentId = parentId.HasValue ? parentId.Value : 0;
var row = _treeTable.NewRow();
row["ParentId"] = node.ParentId;
row["Name"] = node.Name;
_treeTable.Rows.Add(row);
if (node.Children != null)
{
foreach (var child in node.Children)
{
SaveTreeNode(child, node.Id);
}
}
}
}
在这个示例中,我们首先创建了一个DataSet,其中包含一个名为“Tree”的DataTable。然后,我们使用SqlDataAdapter将数据库表中的数据填充到DataTable中。接下来,我们创建了一个名为“SaveTree”的方法,该方法将树结构保存到数据库表中。最后,我们使用递归函数“SaveTreeNode”将树结构转换为DataTable中的行,并使用SqlDataAdapter将DataTable中的新行更新到数据库表中。
请注意,这只是一个示例代码,您可能需要根据您的具体需求进行调整。
领取专属 10元无门槛券
手把手带您无忧上云