c# - mysql插入max+1错误

标签 c# mysql

我有一个包含数据网格的win表单,我向其中添加行,并且我想在数据库中插入这一行,但每一行都有自己的ID,所以我编写了这个查询并尝试这样做,但特别是有错误当尝试在每行中插入最大 ID +1 时,请帮助我正确编写此查询。

这是我的查询:

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    OracleConnection CN = new OracleConnection(ConnectionString);
    string Query = 
           "insert into EMP_HASM_DET " +
           "(MAXID,EMPID,GHYAB,TAGMEE3,GZA) " +
           "  (SELECT 1 + coalesce((SELECT max(MAXID) FROM EMP_HASM_DET)), 1),'" + 
           this.dataGridView1.Rows[i].Cells[0].Value + "','" + 
           this.dataGridView1.Rows[i].Cells[1].Value + "','" + 
           this.dataGridView1.Rows[i].Cells[2].Value + "','" + 
           this.dataGridView1.Rows[i].Cells[3].Value + "'";
    OracleCommand cmd = new OracleCommand(Query, CN);
    CN.Open();
    cmd.ExecuteNonQuery();
    CN.Close();
}

最佳答案

一些想法...

  • 我在您的 sql 中没有看到 VALUES 子句,我认为这可能是问题的一部分。
  • 您将问题标记为 MySQL,但您在代码示例中引用了 Oracle 连接...它是什么?
  • 您正在打开和关闭每一行的连接。这是很大的开销,打开它一次,发出命令,然后关闭它。

虽然与您的问题没有直接关系,但您可能会考虑重新格式化代码以使用 String.Format ,如下所示。它使内容更容易阅读。特别是因为您并不经常附加单引号。像我一样在您的代码中添加 Debug.WriteLine 语句,并让我们知道它输出的内容...这可能会使您的问题更加明显,并让我们能够更好地帮助您。

-- 未经测试的代码如下 --

string sqlTemplate = "INSERT INTO EMP_HASM_DET(MAXID,EMPID,GHYAB,TAGMEE3,GZA) VALUES ({0}, '{1}', '{2}', '{3}', '{4}')";
string sqlSubquery = "(SELECT COALESCE(max(MAXID)+1, 1) FROM EMP_HASM_DET)";

OracleConnection CN = new OracleConnection(ConnectionString);
CN.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
  string Query = String.Format(sqlTemplate, 
        sqlSubquery,
        this.dataGridView1.Rows[i].Cells[0].Value,
        this.dataGridView1.Rows[i].Cells[1].Value,
        this.dataGridView1.Rows[i].Cells[2].Value,
        this.dataGridView1.Rows[i].Cells[3].Value);

  Debug.WriteLine(Query);

  OracleCommand cmd = new OracleCommand(Query, CN);
  cmd.ExecuteNonQuery();
}
CN.Close();

关于c# - mysql插入max+1错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18612080/

相关文章:

c# - codefirst 数据库未创建

PHP、MYSQL、FOREACH 检查值是否相同

mysql - #1071 - 指定的 key 太长;最大 key 长度为 767 字节

java - 一次 try/catch 中的 2 个 SQL 查询。不工作

c# - 按带有多个字符的分隔符的字符串拆分

c# - PostgreSQL hstore, json C# Visual Studio 实现

c# - 在 iOS 上。当应用程序被发送到后台时,该应用程序是否仍在同一个 UI 线程上运行,或者是否被移动到新的不同线程

c# - 使用 Linq 的数据透视表

java - 锁定数据库记录以实现线程间的并发

mysql - 如果 SQL 中存在一个值,则排除除该值之外的所有值