健康一贴灵,专注医药行业管理信息化

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;
        }

 

posted @ 2022-03-18 11:21  一贴灵  阅读(892)  评论(0编辑  收藏  举报
学以致用,效率第一