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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
2015-03-18 python 利用pymssql连接MSSQL数据库,简单示例
2015-03-18 转:Python操作SQLServer示例