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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM