holmes31415
holmes31415
采纳率40%
2019-01-17 10:55 阅读 537

请教不规则大小数组如何存入sqlserver数据库中

5

在做一个网络项目,例如我接收到一个不规则长度的数组数据

int[][] data=new int[4][];
    data[0]=new int[3];
    data[1]=new int[4];
    data[2]=new int[5];
    data[3]=new int[6];

目前设计的数据库字段是4个字段 data1,data2,data3,data4
假设本次存储完的数据为

    1   1   1   1
    2   2   2   2
    3   3   3   3
    NULL    4   4   4
    NULL    NULL    5   5
    NULL    NULL    NULL    6
    NULL    NULL    NULL    NULL
    假设data1又接收到新的数据,我该如何填入第四行中,这个该如何判断
    我的数据库字段该如何设计比较合理
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • yanglucisco carrot_hlb_cxy 2019-01-19 17:41

    数据库,字符串字段,格式为json格式,[[0,0,0],[0,1,2,3],[0,2,4,6,8],[0,3,6,9,12,15]]
    可以使用JsonConvert.SerializeObject()串行化为字符串存放到数据库中,
    使用JsonConvert.DeserializeObject(json)还原为不规则数组

    int[][] intAA = new int[4][];
                for(int i=0;i<intAA.Length;i++)
                {
                    intAA[i] = new int[i + 3];
                }
                for(int i=0;i<intAA.Length;i++)
                {
                    for(int j=0;j<intAA[i].Length;j++)
                    {
                        intAA[i][j] = i * j;
                    }
                }
                string json = JsonConvert.SerializeObject(intAA);
                var str1 = "[[0,0,0],[0,1,2,3],[0,2,4,6,8],[0,3,6,9,12,15]]";
                var obj= JsonConvert.DeserializeObject<int[][]>(json);
    
    点赞 1 评论 复制链接分享
  • victor_yang victor_yang 2019-01-24 15:45

    表格要加一个主键ID,自增的也可以,主要用来定位
    data1来数据时
    if exists(select * from tbData where data1 is null) --有data1为空的记录就更新
    update tbData
    set data1=@Data
    where ID=(select min(ID) from tbData where data1 is null) --找最早的那条记录来更新
    else
    insert into tbData(data1) --data1都不为空,就新增一条记录
    values(@data1)

    data1和data2同时来数据时
    if exists(select * from tbData where data1 is null and data2 is null) //有data1和data2同时为空的记录就更新
    update tbData
    set data1=@Data1,data2=@data2
    where ID=(select min(ID) from tbData where data1 is null and data2 is null) --找最早的那条记录来更新
    else
    insert into tbData(data1,data2) --没有data1和data2同时都不为空的,就新增一条记录
    values(@data1,@data2)

    以上我是直接写出来的,可能有语法错误,大概的意思就是有符合的同时写入条件的记录的就更新,没有 就新增

    点赞 1 评论 复制链接分享
  • Moluth Moluth 2019-01-17 11:03

    可以转换成字符串,把字符串存到数据库中

    点赞 评论 复制链接分享
  • songwei1006 舍文 2019-01-17 13:24
    表设计成  
    id , value ,  type或者len update_time
    

    1 4 3 2019-01-01
    2 4 3 2019-01-01
    3 4 3 2019-01-01
    就是把原来的表行列倒置,这样不会有null.但是行数比以前增加了。

    点赞 评论 复制链接分享
  • YU_Cheng_Long 浮生-半日 2019-01-17 20:35

    试试转成json字符串进行存储, 用的时候在转回来

    点赞 评论 复制链接分享
  • qiqiyi qiqiyi 2019-01-18 13:50

    转成带分隔符的字符串序列存数据库字段,用时再解析

    点赞 评论 复制链接分享
  • weixin_44566653 流云逝水 2019-01-18 14:33

    转化为同一数组进行合并,或者for循环,依次添加每个数组的值

    点赞 评论 复制链接分享

相关推荐