从 DatagridView 错误插入数据
Inserting data from DatagridView error
我有
string insert_cmd_str;
using (conn_server)
{
using (NpgsqlCommand insert_cmd = new NpgsqlCommand())
{
insert_cmd.Connection = conn_server;
conn_server.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
insert_cmd_str = "insert into @table values (" +
"'" + dataGridView1.Rows[i].Cells[0].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[1].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[2].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[3].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[4].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[5].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[6].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[7].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[8].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[9].FormattedValue + "')";
insert_cmd.CommandText = insert_cmd_str;
insert_cmd.Parameters.AddWithValue("@table", "table");
MessageBox.Show(insert_cmd.CommandText + Environment.NewLine +
insert_cmd.Parameters["@db"].Value);
insert_cmd.ExecuteNonQuery();
}
conn_server.Close();
}
}
我得到一个错误:
ERROR: 42601: syntax error at or near "("
我添加了 MessageBox
以在命令执行前检查命令文本,这看起来不错。如果我 post 将相同的文本输入 PG admin,它会执行命令而不会出现错误。
命令文本为:
insert into @table values ('425', '10-31-2016 00:00:00', 'False', '', 'test', 'test', 'test', 'pas_kosmetologus', 'Skambutis', '237')
@table
的值为table
。
我不知道错误是从哪里来的。我什至尝试从命令文本中删除两个括号,但它仍然会引发相同的错误。
我是不是漏掉了什么明显的东西?
PostgreSQL 不支持参数化 table 或列名 - 你必须将它们连接到你的字符串中(但要注意 SQL 注入),或者写一个plpgsql。有关示例,请参阅 。
无论如何,连接数据网格中的值会使您对 SQL 注入敞开大门,考虑在那里使用参数。
我有
string insert_cmd_str;
using (conn_server)
{
using (NpgsqlCommand insert_cmd = new NpgsqlCommand())
{
insert_cmd.Connection = conn_server;
conn_server.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
insert_cmd_str = "insert into @table values (" +
"'" + dataGridView1.Rows[i].Cells[0].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[1].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[2].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[3].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[4].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[5].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[6].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[7].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[8].FormattedValue + "', " +
"'" + dataGridView1.Rows[i].Cells[9].FormattedValue + "')";
insert_cmd.CommandText = insert_cmd_str;
insert_cmd.Parameters.AddWithValue("@table", "table");
MessageBox.Show(insert_cmd.CommandText + Environment.NewLine +
insert_cmd.Parameters["@db"].Value);
insert_cmd.ExecuteNonQuery();
}
conn_server.Close();
}
}
我得到一个错误:
ERROR: 42601: syntax error at or near "("
我添加了 MessageBox
以在命令执行前检查命令文本,这看起来不错。如果我 post 将相同的文本输入 PG admin,它会执行命令而不会出现错误。
命令文本为:
insert into @table values ('425', '10-31-2016 00:00:00', 'False', '', 'test', 'test', 'test', 'pas_kosmetologus', 'Skambutis', '237')
@table
的值为table
。
我不知道错误是从哪里来的。我什至尝试从命令文本中删除两个括号,但它仍然会引发相同的错误。
我是不是漏掉了什么明显的东西?
PostgreSQL 不支持参数化 table 或列名 - 你必须将它们连接到你的字符串中(但要注意 SQL 注入),或者写一个plpgsql。有关示例,请参阅 。
无论如何,连接数据网格中的值会使您对 SQL 注入敞开大门,考虑在那里使用参数。