DateTimePicker 和 PostgreSQL 数据 Table 搜索
DateTimePicker and PostgreSQL Data Table search
我正在尝试在两个日期之间使用 DateTimePicker 搜索 DataGridView,我不确定这是否是正确的方法。这是我的代码:
private void btnsearch_Click(object sender, EventArgs e)
{
if (comboBox1.Text == "Document Date")
{
CRUD.cmd = new NpgsqlCommand("SELECT * FROM archive WHERE docdate BETWEEN '" + dtpFrom.Text + "' AND '" + dtpTo.Text + "'", CRUD.con);
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = CRUD.cmd;
dt.Clear();
da.Fill(dt);
grid.DataSource = dt;
}
}
我的 DateTimePicker 在设计器上显示时具有以下格式:27.11.2020。
postgreSQL table 中的格式照常是 2020-11-27。
这是我收到的错误:Npgsql.PostgresException: '22008: date/time 字段值超出范围:“27.11.2020.”'
我知道我必须更改格式但不完全确定该怎么做。有点愚蠢的问题,但我真的是 PostgreSQL 和 C# 的新手,所以任何帮助将不胜感激。
使用这个查询,这可能有效:
SELECT * FROM archive WHERE docdate::TIMESTAMP BETWEEN
(split_part('27.11.2020', '.',2)||'/'||split_part('27.11.2020', '.',1)||'/'||split_part('27.11.2020', '.',3))::TIMESTAMP
--'" + dtpFrom.Text + "'
AND
(split_part('27.11.2020', '.',2)||'/'||split_part('27.11.2020', '.',1)||'/'||split_part('27.11.2020', '.',3))::TIMESTAMP
--'" + dtpTo.Text + "'
//已编辑
复制粘贴以下代码:
private void btnsearch_Click(object sender, EventArgs e)
{
if (comboBox1.Text == "Document Date")
{
CRUD.cmd = new NpgsqlCommand("SELECT * FROM archive WHERE docdate::TIMESTAMP BETWEEN (split_part('" + dtpFrom.Text + "', '.',2)||'/'||split_part('" + dtpFrom.Text + "', '.',1)||'/'||split_part('" + dtpFrom.Text + "', '.',3))::TIMESTAMP AND (split_part('" + dtpTo.Text + "', '.',2)||'/'||split_part('" + dtpTo.Text + "', '.',1)||'/'||split_part('" + dtpTo.Text + "', '.',3))::TIMESTAMP", CRUD.con);
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = CRUD.cmd;
dt.Clear();
da.Fill(dt);
grid.DataSource = dt;
}
}
我正在尝试在两个日期之间使用 DateTimePicker 搜索 DataGridView,我不确定这是否是正确的方法。这是我的代码:
private void btnsearch_Click(object sender, EventArgs e)
{
if (comboBox1.Text == "Document Date")
{
CRUD.cmd = new NpgsqlCommand("SELECT * FROM archive WHERE docdate BETWEEN '" + dtpFrom.Text + "' AND '" + dtpTo.Text + "'", CRUD.con);
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = CRUD.cmd;
dt.Clear();
da.Fill(dt);
grid.DataSource = dt;
}
}
我的 DateTimePicker 在设计器上显示时具有以下格式:27.11.2020。 postgreSQL table 中的格式照常是 2020-11-27。 这是我收到的错误:Npgsql.PostgresException: '22008: date/time 字段值超出范围:“27.11.2020.”' 我知道我必须更改格式但不完全确定该怎么做。有点愚蠢的问题,但我真的是 PostgreSQL 和 C# 的新手,所以任何帮助将不胜感激。
使用这个查询,这可能有效:
SELECT * FROM archive WHERE docdate::TIMESTAMP BETWEEN
(split_part('27.11.2020', '.',2)||'/'||split_part('27.11.2020', '.',1)||'/'||split_part('27.11.2020', '.',3))::TIMESTAMP
--'" + dtpFrom.Text + "'
AND
(split_part('27.11.2020', '.',2)||'/'||split_part('27.11.2020', '.',1)||'/'||split_part('27.11.2020', '.',3))::TIMESTAMP
--'" + dtpTo.Text + "'
//已编辑
复制粘贴以下代码:
private void btnsearch_Click(object sender, EventArgs e)
{
if (comboBox1.Text == "Document Date")
{
CRUD.cmd = new NpgsqlCommand("SELECT * FROM archive WHERE docdate::TIMESTAMP BETWEEN (split_part('" + dtpFrom.Text + "', '.',2)||'/'||split_part('" + dtpFrom.Text + "', '.',1)||'/'||split_part('" + dtpFrom.Text + "', '.',3))::TIMESTAMP AND (split_part('" + dtpTo.Text + "', '.',2)||'/'||split_part('" + dtpTo.Text + "', '.',1)||'/'||split_part('" + dtpTo.Text + "', '.',3))::TIMESTAMP", CRUD.con);
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = CRUD.cmd;
dt.Clear();
da.Fill(dt);
grid.DataSource = dt;
}
}