【问题标题】:command.parameters.add not working - mysql C#command.parameters.add 不工作 - mysql C#
【发布时间】:2015-03-12 15:28:07
【问题描述】:

在 C# 和 MySQL 中使用 xaml/wpf;与 2013 年相比;最新的mysql Net Connector(3天前下载)

我意识到有很多与我的问题相关的话题;但我还没有找到答案。 ...我要拔头发了...我收到一般异常错误:

类型的第一次机会异常 System.Data.dll 中发生“MySql.Data.MySqlClient.MySqlException”

在这一行:adapter.Update(prodTable);

在这个函数中:

private void UpdateDBValues()
        {
            MySqlConnection connection = new MySqlConnection(connString);
            MySqlDataAdapter adapter = new MySqlDataAdapter();

            //Get our current time in our desired string format( ##:## AM/PM)
            DateTime time = DateTime.Now;             // Use current time
            string format = "h:mm tt";            // Use this format
            string timeStr = time.ToString(format);

            //UPDATE
            string updateString = "UPDATE gas_production " +
              "SET well_id=?well_id, entry_date=?entry_date, status=?status, " +
              "event=?event, hours_down=?hours_down, time=?time, mcf=?mcf,static_psi=?static_psi, " +
              "line_psi=?line_psi, tbg_psi=?tbg_psi, csg_psi=?csg_psi, spm=?spm, cycle=?cycle," +
              "water=?water, water_line_psi=?water_line_psi, water_meter=?water_meter, comments=?comments" +
              "WHERE entry_id=?oldentry_id";

            MySqlCommand updateCommand = new MySqlCommand(updateString, connection);
            updateCommand.Parameters.Add("?well_id", MySqlDbType.VarChar, 10, "well_id");
            updateCommand.Parameters.Add("?entry_date", MySqlDbType.VarChar, 10, "entry_date");
            updateCommand.Parameters.Add("?status", MySqlDbType.VarChar, 20, "status");
            updateCommand.Parameters.Add("?event", MySqlDbType.VarChar, 50, "event");
            updateCommand.Parameters.Add("?hours_down", MySqlDbType.Int32, 11, "hours_down");
            updateCommand.Parameters.Add("?time", MySqlDbType.VarChar, 8, "time");
            updateCommand.Parameters.Add("?mcf", MySqlDbType.Int32, 11, "mcf");
            updateCommand.Parameters.Add("?static_psi", MySqlDbType.Int32, 11, "static_psi");
            updateCommand.Parameters.Add("?line_psi", MySqlDbType.Int32, 11, "line_psi");
            updateCommand.Parameters.Add("?tbg_psi", MySqlDbType.Int32, 11, "tbg_psi");
            updateCommand.Parameters.Add("?csg_psi", MySqlDbType.Int32, 11, "csg_psi");
            updateCommand.Parameters.Add("?spm", MySqlDbType.Int32, 11, "spm");
            updateCommand.Parameters.Add("?cycle", MySqlDbType.Int32, 11, "cycle");
            updateCommand.Parameters.Add("?water", MySqlDbType.Int32, 11, "water");
            updateCommand.Parameters.Add("?water_line_psi", MySqlDbType.Int32, 11, "water_line_psi");
            updateCommand.Parameters.Add("?water_meter", MySqlDbType.Int32, 11, "water_meter");
            updateCommand.Parameters.Add("?comments", MySqlDbType.VarChar, 255, "comments");
            MySqlParameter parameter = updateCommand.Parameters.Add("?oldentry_id", MySqlDbType.Int32, 11, "entry_id");
            parameter.SourceVersion = DataRowVersion.Original;
            adapter.UpdateCommand = updateCommand;

            //INSERT

            string insertString = "INSERT INTO gas_production "+
                "(entry_id, well_id, entry_date, status, event, hours_down, time, mcf, static_psi" +
                "line_psi, tbg_psi, csg_psi, spm, cycle, water, water_line_psi, water_meter, comments) " +
                "VALUES " +
                "(?entry_id, ?well_id, ?entry_date, ?status, ?event, ?hours_down, ?time, ?mcf, ?static_psi " +
                "?line_psi, ?tbg_psi, ?csg_psi, ?spm, ?cycle, ?water, ?water_line_psi, ?water_meter, ?comments)";

            MySqlCommand insertCommand = new MySqlCommand(insertString, connection);
            insertCommand.Parameters.Add("?entry_id", MySqlDbType.Int32, 11, "entry_id");
            insertCommand.Parameters.Add("?well_id", MySqlDbType.VarChar, 10, "well_id");
            insertCommand.Parameters.Add("?entry_date", MySqlDbType.VarChar, 10, "entry_date");
            insertCommand.Parameters.Add("?status", MySqlDbType.VarChar, 20, "status");
            insertCommand.Parameters.Add("?event", MySqlDbType.VarChar, 50, "event");
            insertCommand.Parameters.Add("?hours_down", MySqlDbType.Int32, 11, "hours_down");
            insertCommand.Parameters.Add("?time", MySqlDbType.VarChar, 8, timeStr);
            insertCommand.Parameters.Add("?mcf", MySqlDbType.Int32, 11, "mcf");
            insertCommand.Parameters.Add("?static_psi", MySqlDbType.Int32, 11, "static_psi");
            insertCommand.Parameters.Add("?line_psi", MySqlDbType.Int32, 11, "line_psi");
            insertCommand.Parameters.Add("?tbg_psi", MySqlDbType.Int32, 11, "tbg_psi");
            insertCommand.Parameters.Add("?csg_psi", MySqlDbType.Int32, 11, "csg_psi");
            insertCommand.Parameters.Add("?spm", MySqlDbType.Int32, 11, "spm");
            insertCommand.Parameters.Add("?cycle", MySqlDbType.Int32, 11, "cycle");
            insertCommand.Parameters.Add("?water", MySqlDbType.Int32, 11, "water");
            insertCommand.Parameters.Add("?water_line_psi", MySqlDbType.Int32, 11, "water_line_psi");
            insertCommand.Parameters.Add("?water_meter", MySqlDbType.Int32, 11, "water_meter");
            insertCommand.Parameters.Add("?comments", MySqlDbType.VarChar, 255, "comments");
            adapter.InsertCommand = insertCommand;

            //DELETE
            MySqlCommand deleteCommand = new MySqlCommand("DELETE FROM gas_production WHERE entry_id=?entry_id", connection);
            MySqlParameter delParameter = deleteCommand.Parameters.Add("?entry_id", MySqlDbType.Int32, 10, "entry_id");
            delParameter.SourceVersion = DataRowVersion.Original;
            adapter.DeleteCommand = deleteCommand;

            //UPDATE ADAPTER
            DataTable prodTable = (DataTable)((DataSourceProvider)FindResource("ProdTable")).Data; //get DataTable
            adapter.Update(prodTable);//finally update
        }

我已经重新输入了 3 次以确保所有信息都在那里;试过 AddWithValues、@ 和 ? sigils,确保我的 DataTable 与我的 MySQL 表完全一样,验证了从 xaml 到 c# 的绑定(它们应该没关系?)......我在这里错过了什么?和/或我可以采取什么不同的方法来完成这项工作? 我相信它在我传递的参数的语法中,但我找不到任何错误,它只会抛出 1 个错误......没有别的。

如果我需要提供更多信息,请告诉我您需要什么。

一点指导将不胜感激!

编辑:顺便说一句,我关注this tutorial

【问题讨论】:

  • 如何在 MySql 中定义/声明参数,它们与 Sql Server 中的相同吗?如果是这样,您能解释一下参数名称中的? 是什么意思
  • 那个?来自我传递给连接器的查询字符串。 "well_id=?well_id" 然后通过适配器命令传递它: updateCommand.Parameters.Add("?well_id", MySqlDbType.VarChar, 10, "well_id");参数是与适配器一起使用的函数。所以参数不是“定义”的,但它是适配器命令的一部分
  • 在语句中使用“@”前缀,在 Parameters.add 中不使用“@”
  • 像这样:"well_id=@well_id" and updateCommand.Parameters.Add("well_id", MysqlDbType.VarChar,10,"well_id"); ...没用,同样的错误
  • 那个adapter.update... 可以代替那里的工作吗?我看到更新方法有 7 个执行步骤...link 是我正在尝试做的所需的 adapter.update 吗?

标签: c# mysql wpf xaml adaptor


【解决方案1】:

多次尝试后,我决定使用不同的数据库从头开始。我发现连接器不接受某些字段的名称。因此,我建议不要使用下划线,比如 water_line_psi,而是尝试使用 waterLinePSI 或类似的东西,以避免这些并发症。同样,我不知道这是否是确切的问题,但我现在可以正常工作,这是我看到的唯一不同之处。

【讨论】:

    【解决方案2】:

    我遇到了这个错误。原来我没有将命令类型声明为存储过程。 我添加了这条线,它是固定的。

    command.CommandType = CommandType.StoredProcedure;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2014-10-23
      • 2010-11-10
      相关资源
      最近更新 更多