当前位置:编程学习 > C#/ASP.NET >>

做过无限数据库设计的进来看看··

现在急需一个无限商品类别数据库设计 包括插入删除 修改 和显示操作··
 麻烦高人们帮帮忙·· 发个实例给我· · 急啊· · · 能不能做过这星期就靠这个东西了··
  网上找了很多资料· · 可惜菜· 看的不是很懂  而且这方面全的资料也少· ·· 麻烦大家啦··· 

 现在可以用的分不多啦· · 希望大家帮帮忙·· --------------------编程问答-------------------- 忘记了  发到我邮箱 麻烦了 bingsueiliuhen2@163.com --------------------编程问答-------------------- 软件开发是要自己动脑子的,这方面资料很多,看不大懂就是你自己的问题了 --------------------编程问答-------------------- 偶还是刚刚学·· 我看了2个星期了· ·· --------------------编程问答--------------------  public void loadtree(System.Windows.Forms.TreeView tree)
        {
            SystemDataAccess sda = new SystemDataAccess();
            System.Windows.Forms.TreeNode RootNode = new TreeNode();
            tree.Nodes.Clear();
            tree.Nodes.Add(addNots("Root", "工序库", 0, RootNode));
            //tree.ExpandAll();
        }//加载工序库tree

  public System.Windows.Forms.TreeNode addNots(string Name, String NodeName, int Tab, System.Windows.Forms.TreeNode RootNode)
        {
            SystemDataAccess sda = new SystemDataAccess();
            string depstr = "select StepCode as 工序库编码 ,StepName as 工序库名称 ,PreStep as 所属上级工序库编码 from M_Steps  where PreStep='" + Name.Trim() + "'";
            DataTable table = new DataTable();
            System.Data.SqlClient.SqlConnection sqlcon = new System.Data.SqlClient.SqlConnection();
            sqlcon.ConnectionString = sda.getConStr();
            System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(depstr, sqlcon);
            da.Fill(table);
            System.Windows.Forms.TreeNode nodenew = new TreeNode(NodeName);
            nodenew.Name = Name;
            for (int i = 0; i <= table.Rows.Count - 1; i++)
            {
                Tab++;
                string tempa = table.Rows[i][0].ToString().Trim();
                string tempb = table.Rows[i][1].ToString().Trim();
                //nodenew.Nodes[nodenew.Nodes.Count].Name = tempa;           
                nodenew.Nodes.Add(addNots(tempa, tempb, Tab, RootNode));
                Tab--;
            }

            table.Clear();
            return nodenew;
        }//递归加载树tree --------------------编程问答--------------------   public System.Windows.Forms.TreeNode addNots(string Name, String NodeName, int Tab, System.Windows.Forms.TreeNode RootNode)
        {
            SystemDataAccess sda = new SystemDataAccess();
            string depstr = "select StepCode as 工序库编码 ,StepName as 工序库名称 ,PreStep as 所属上级工序库编码 from M_Steps  where PreStep='" + Name.Trim() + "'";
            DataTable table = new DataTable();
            System.Data.SqlClient.SqlConnection sqlcon = new System.Data.SqlClient.SqlConnection();
            sqlcon.ConnectionString = sda.getConStr();
            System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(depstr, sqlcon);
            da.Fill(table);
            System.Windows.Forms.TreeNode nodenew = new TreeNode(NodeName);
            nodenew.Name = Name;
            for (int i = 0; i <= table.Rows.Count - 1; i++)
            {
                Tab++;
                string tempa = table.Rows[i][0].ToString().Trim();
                string tempb = table.Rows[i][1].ToString().Trim();
                //nodenew.Nodes[nodenew.Nodes.Count].Name = tempa;           
                nodenew.Nodes.Add(addNots(tempa, tempb, Tab, RootNode));
                Tab--;
            }

            table.Clear();
            return nodenew;
        }//递归加载树tree



 public void loadtree(System.Windows.Forms.TreeView tree)
        {
            SystemDataAccess sda = new SystemDataAccess();
            System.Windows.Forms.TreeNode RootNode = new TreeNode();
            tree.Nodes.Clear();
            tree.Nodes.Add(addNots("Root", "工序库", 0, RootNode));
            //tree.ExpandAll();
        }//加载工序库tree --------------------编程问答-------------------- 给你两个思路:
1、子父节点
举个列子
节点表(节点编号,父节点编号,名称)
2、编号001002
举个例子
节点表(节点编号,节点名称)
001,服装
001001,上衣
001002,裤子
001001001,长袖
001001002,短袖 --------------------编程问答-------------------- 就是插入数据(产品类别,单不是以级类别的时候)的时候不知道怎么弄·· --------------------编程问答-------------------- 我就用的是virusplayer的方法2. --------------------编程问答--------------------  virusplayer  2、编号001002  后台插入数据这样插 --------------------编程问答-------------------- virusplayer  2、编号001002  后台插入数据怎样插 --------------------编程问答--------------------
引用楼主 yangxiuwu 的帖子:
现在急需一个无限商品类别数据库设计 包括插入删除 修改 和显示操作··  

我的例子是绝可以实现无限类别的.不要浮躁,好好看.应该可以帮到你.

//数据库的连接
    public static OleDbConnection DBConn()
    {
        return new OleDbConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
    }

    //从数据库初始化控件treeView
    public static void treeViewInit(TreeView treeView1)
    {        
        using (OleDbConnection conn = DBConn())
        {
            conn.Open();
            OleDbCommand cmd = new OleDbCommand("select * from nodes", conn);
            OleDbDataReader oleReader = cmd.ExecuteReader();
            while (oleReader.Read())
            {
                string[] nodes = oleReader["nodeName"].ToString().Split('/');
                string nodeID = oleReader["nodeID"].ToString();
                TreeNode curNode= new TreeNode();//当前结点
                for (int i = 0; i < nodes.Length; i++)
                {
                    if (i == 0)
                    {
                        bool addNode = true;                    
                        for (int j = 0; j < treeView1.Nodes.Count; j++)
                        {
                            if (nodes[0] == treeView1.Nodes[j].Text)
                            {
                                curNode = treeView1.Nodes[j];//设为当前结点
                                addNode = false;
                                break;
                            }
                        }
                        if (addNode == true)
                        {
                            TreeNode tempNode = new TreeNode(nodes[0]);
                            treeView1.Nodes.Add(tempNode);
                            curNode = tempNode;//设为当前结点
                        }
                    }
                    else
                    {
                        bool addNode = true;    
                        for (int k = 0; k < curNode.ChildNodes.Count; k++)
                        {
                            if (nodes[i] == curNode.ChildNodes[k].Text)
                            {
                                addNode = false;
                                curNode = curNode.ChildNodes[k];//设为当前节点
                                break;
                            }

                        }
                        if (addNode == true)
                        {
                            TreeNode tempNode = new TreeNode(nodes[i]);
                            curNode.ChildNodes.Add(tempNode);
                            curNode = tempNode;//设为当前结点
                        }
                    }
                }
                curNode.Value = "类" + nodeID;//设置属性
            }

        }
        
    }
--------------------编程问答--------------------
引用 11 楼 anita2008 的回复:
引用楼主 yangxiuwu 的帖子:
现在急需一个无限商品类别数据库设计 包括插入删除 修改 和显示操作··   
 
我的例子是绝可以实现无限类别的.不要浮躁,好好看.应该可以帮到你. 


数据库中的的表是如下结构.
表nodes 就只有两个字段
nodeID  int类型 
nodeName 长符串就可以.

nodeID nodeName
1 合作伙伴
2 兴安县
3 兴安县/兴安镇
4 灵桂县
5 桂林市
6 公司客户登记表
7 公司客户登记表/余波
8 公司客户登记表/欧阳
9 公司客户登记表/谢金海
10 东北地区
11 西北地区
12 西南地区
13 桂林市/七星区
14 学习
15 中国
16 西北地区/广东
17 东北地区/黑龙江
18 东北地区/北京
19 中国/广西

分隔用/ --------------------编程问答--------------------
引用 12 楼 anita2008 的回复:
引用 11 楼 anita2008 的回复:
引用楼主 yangxiuwu 的帖子: 
现在急需一个无限商品类别数据库设计 包括插入删除 修改 和显示操作··    
  
我的例子是绝可以实现无限类别的.不要浮躁,好好看.应该可以帮到你.  

QQ:103884244
需要的话加我QQ.帮你实现. --------------------编程问答-------------------- 不能沉啊 ··· --------------------编程问答-------------------- 比如说父类的ID是001,把父类的ID 001取过来,然后加上自己的001,不就成了001001了吗 --------------------编程问答-------------------- 001~999还是有限的。。。 --------------------编程问答-------------------- <style>
body,td,th
{
font-size:12px;
vertical-align:top;
}
th
{
layout-flow:vertical-ideographic ; 
}
</style>

<TABLE  border=1>
<TR>
<TD colspan=3 align=center>两种树型结构SQL的对比.htm</TD>
 
</TR>
<TR>
<TH>名称</TH>
<TD>方法1:父子结构Tree1表</TD>
<TD>方法2:编码结构Tree2表</TD>
</TR>
<TR>
<TH>数据形式</TH>
<TD>
<xmp>
id pId content 
--------------------------------------
1 0 节点
2 0 节点
...
11 1 节点
...
21 2 节点
...
121 12 节点
...
1110 110 节点
</xmp>
</TD>
<TD>
<xmp>
id nodeCode content
--------------------------------------
1 001 节点
2 002 节点
...
11 001001 节点
...
112 001001002 节点
...
1104 010010004 节点
...
</xmp>
</TD>
</TR>

<TR>
<TH>建表语句</TH>
<TD>
<xmp>
CREATE TABLE [dbo].[Tree1] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[pId] [int] NULL ,
[content] [varchar] (10)  NULL 
) ON [PRIMARY]
</xmp>
</TD>
<TD>
<xmp>
CREATE TABLE [dbo].[Tree2] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[nodeCode] [varchar] (120)  NOT NULL ,
[content] [varchar] (10) NULL 
) ON [PRIMARY]
</xmp>
</TD>
</TR>


<TR>
<TH>插入数据10+100+1000条,深度3,广度10</TH>
<TD>
<xmp>--truncate table Tree1 
declare @E int--广度循环变量
declare @EE int--广度循环变量 
declare @EEE int--广度循环变量
declare @pId int--父id
declare @content varchar(10)

set @content='节点'
--添加第1层10个节点
set @E=1
while  @E<=10
begin
set @pId=0
insert tree1(pId,content) values(@pId,@content)
set @E=@E+1
end
--添加第2层100个节点
set @E=1
while  @E<=10
begin
set @EE=1
while  @EE<=10
begin
set @pId=@E
insert tree1(pId,content) values(@pId,@content)
set @EE=@EE+1
end
set @E=@E+1
end
--添加第3层1000个节点
set @E=1
while  @E<=10
begin
set @EE=1
while  @EE<=10
begin
set @EEE=1
while  @EEE<=10
begin
set @pId=@E*10 + @EE
insert tree1(pId,content) values(@pId,@content)
set @EEE=@EEE+1
end
set @EE=@EE+1
end
set @E=@E+1
end
--select count(*) from tree1</xmp>

</TD>
<TD>
<xmp>--truncate table Tree2
declare @nodeCode varchar(30)
declare @content varchar(10)
declare @E int--广度循环变量
declare @EE int--广度循环变量 
declare @EEE int--广度循环变量
set @content='节点'

--添加第1层10个节点
set @E=1
while @E<= 10 
begin   
  set @nodeCode =right(rtrim(str(1000 + @E)),3)
insert Tree2(nodeCode,content) values(@nodeCode,@content)
set @E=@E+1
end
--添加第2层100个节点
set @E=1
while @E<= 10 
begin 
set @EE=1
while @EE<= 10 
begin 
set @nodeCode =right(rtrim(str(1000 + @E)),3) 
  set @nodeCode =@nodeCode + right(rtrim(str(1000 + @EE)),3)
insert Tree2(nodeCode,content) values(@nodeCode,@content)
set @EE=@EE+1
end
set @E=@E+1
end
--添加第3层1000个节点
set @E=1
while @E<= 10 
begin 
set @EE=1
while @EE<= 10 
begin 
set @EEE=1
while @EEE<= 10 
begin 
set @nodeCode =right(rtrim(str(1000 + @E)),3)
  set @nodeCode =@nodeCode + right(rtrim(str(1000 + @EEE)),3)
insert Tree2(nodeCode,content) values(@nodeCode,@content)
set @EEE=@EEE+1
end
set @EE=@EE+1
end
set @E=@E+1
end
select count(*) from tree2</xmp>
</TD>
</TR>
<TR>
<TH>得到节点深度和排序的办法</TH>
<TD>
<xmp>
用函数,本例是邹建写的,效率比较高。
create function get_Deep_tree1()
returns @re table([id] int,[level] int,sid varchar(8000))
as
begin
declare @l int
set @l=0
insert @re select [id],@l,right(10000+[id],4)
from [tree1] where [pid]=0
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.[id],@l,b.sid+right(10000+a.[id],4)
from [tree1] a,@re b
where a.[pid]=b.[id] and b.[level]=@l-1
end
return
end
go
</xmp>
</TD>
<TD>
<xmp>
节点深度就是编码长度/3
len(nodeCode)/3
排序只要order by nodeCode asc就可以得到
web叶面需要的
</xmp>
</TD>
</TR>

<TH>查询排序</TH>
<TD>
<xmp>
select  a.id,a.content,b.[level]+1 深度
from [tree1] a,get_Deep_tree1() b 
where a.[id]=b.[id]
order by b.sid
</xmp>
</TD>
<TD>
<xmp>select *,len(nodeCode)/3 深度 from tree2 order by nodeCode asc
</xmp>
</TD>
</TR>
<TR>
<TH>排序结果</TH>
<TD>
<xmp>
id content 深度
1 节点 1
11 节点 2
111 节点 3
..
120 节点 3
12 节点 2
...
1072 节点 3
</xmp>
</TD>
<TD>
<xmp>id nodeCode content 深度
1 001 节点 1
11 001001 节点 2
111 001001001 节点 3
...
210 001010010 节点 3
2 002 节点 1
21 002001 节点 2
211 002001001 节点 3
...
1088 010008008 节点 3
...
1101 010010001 节点 3
</xmp>
</TD>
</TR>
 <TR>
<TH>查询时间</TH>
<TD>
<xmp>
30毫秒左右
</xmp>
</TD>
<TD>
<xmp>15毫秒左右
</xmp>
</TD>
</TR>
</TABLE>
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,