• c#操作pgsql数据库中的数组字段(整形为例)


    近期学习C#开发一个管理系统,后台采用PostgreSql数据库,第一次使用数组作为字段类型,因为C#类型基础不牢,频繁报错,取不到想要的值,网上资料也较少,搜到的问题,基本没有可以参考的答案;

    在用dataGridView控件展示有以“数组”为字段类型的列时,要指定DataPropertyName,显示的结果不能直接引用 ,要进行处理后才能显示;

    一、PG数据库脚本

    DROP TABLE IF EXISTS "public"."test1";
    CREATE TABLE "public"."test1" (
      "id" int4,
      "col1" int4[],
      "col2" int4[],
      "col3" text[][] COLLATE "pg_catalog"."default"
    )
    ;
    
    INSERT INTO "public"."test1" VALUES (1, '{1,2}', NULL, NULL);
    INSERT INTO "public"."test1" VALUES (2, '{1,2}', NULL, NULL);
    INSERT INTO "public"."test1" VALUES (3, '{1,2}', NULL, NULL);

    二、datagridiew中编辑列及绑定;

    如果不在dataGridView1中绑定每列的数据源,则COL1,COL2,COL3数组列不会自动显示;

     以下是没有指定DataPropertyName的运行效果,只有id列

    三、运行显示结果

    程序直接运行,dataGridView列中的内容为Int32[] Array .

    四、几种不同的取值结果:

    以下是以在DataTAble中的结果来演示说明 ,如果直接取值会是:System.Int32[];

    取他的类型显示是Object , 但是打断点测试时,可以看到他的内容是表格;

     在窗体的load事件中加入以下代码:(只取了第一行,COL1列的数据做演示)

            DataTable dt = DBHelperPg.ExecuteDataTable("select * from test1"); --DBHelperPg.ExecuteDataTable是我封装的SQL类和方法

             dataGridView1.DataSource = dt;


           textBox1.Text = Convert.ToString(dt.Rows[0][1]); textBox2.Text = Convert.GetTypeCode(dt.Rows[0][1]).ToString(); var abdc = dt.Rows[0][1]; Array a = new Array[3]; a = (Array) abdc; textBox3.Text = ((Array)dt.Rows[0][1]).ToString(); textBox4.Text = CommFunc.IntArrayToString(a);
                var ddc = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[1].Value;
                textBox1.Text = Convert.ToString(ddc);
                textBox2.Text = Convert.GetTypeCode(ddc).ToString();
                
                Array  a = new Array[3];
                a = (Array) ddc;
                textBox3.Text = ((Array)a).ToString();
                textBox4.Text = CommFunc.IntArrayToString(a);

    以DataGridView控件取值 为例;

    附:整形数组转字符串函数(通过object类型强转过来的适应,用int[]定义的应该要简单 些)

            /// <summary>
            /// 整形数组转字符串
            /// </summary>
            /// <param name="intParam">整形数组</param>
            /// <returns>字符串</returns>
            public static  string IntArrayToString(Array intParam)
            {
                string str = "";
                try
                {
                    foreach (int i in intParam)
                    {
                        str += i.ToString() + ",";
                    }
                }
                catch
                {
    
                }
    
                return str;
            }
  • 相关阅读:
    设计模式 --建造者模式
    HIVE
    Sqoop Mysql导入Hive完整命令参数解析
    Centos7 安装CDH6.3.2 集群
    sqlalchemy 批量插入
    前后端分离
    后台管理模板
    Springboot
    汇编基础
    百万点数据矢量切片实时聚合展示
  • 原文地址:https://www.cnblogs.com/lrzy/p/16020985.html
Copyright © 2020-2023  润新知