我三流

いろいろ自分なりにやってみたことを書いています

M$ VC# 2010でPostgreSQLのデータをDataGridViewでフォームに出力する

この土日はこれで終わったといっても過言ではない。
DataSourceにテーブルデータを取り込む部分がわからなくて泣いた。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;

namespace PostgreSQLTEst
{
	public partial class Form1 : Form
	{
		private DataSet ds = new DataSet();
		private DataTable dt = new DataTable();
		public Form1()
		{	
			InitializeComponent();	
		}
		private void llOpenConnAndSelect_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
		{
			try
			{
				// PostgeSQL-style connection string
                //string connstring = String.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};",
                //    tbHost.Text, tbPort.Text, tbUser.Text, tbPass.Text, tbDataBaseName.Text );
                NpgsqlConnection conn = new NpgsqlConnection("Server=192.168.0.30;Port=5432;User Id=yu2admin;Password=yu2;Database=yu2;Encoding=UNICODE");
                
                // Making connection with Npgsql provider
                //NpgsqlConnection conn = new NpgsqlConnection(connstring);
				conn.Open();
				// quite complex sql statement
				string sql = "SELECT * FROM users ORDER BY id";
				// data adapter making request from our connection
				NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
				// i always reset DataSet before i do something with it.... i don't know why :-)
				ds.Reset();
				// filling DataSet with result from NpgsqlDataAdapter
				da.Fill(ds);
				// since it C# DataSet can handle multiple tables, we will select first
				dt = ds.Tables[0];
				// connect grid to DataTable
				dataGridView1.DataSource = dt;
				// since we only showing the result we don't need connection anymore
				conn.Close();
			}
			catch (Exception msg)
			{
				// something went wrong, and you wanna know why
				MessageBox.Show(msg.ToString());
				throw;
			}
		}
	}
}