在C#中使用xaml / wpf和MySQL; VS 2013;最新的mysql Net Connector(3天前下载)
我已经意识到有很多与我的问题相关的线索;但我还没有找到答案。 ......而且我要把头发拉出来......我得到一般的异常错误:
类型的第一次机会异常 ' MySql.Data.MySqlClient.MySqlException'发生在System.Data.dll
中
在这一行: 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#的绑定(这应该不重要吗?)...我在这里缺少什么?和/或我可以采取什么不同的方法来使这项工作? 我相信这是我传递的参数的语法,但我找不到任何错误,它只会抛出一个错误......没有别的。
如果我需要提供更多信息,请告诉我您的需求。
非常感谢一点指导!
编辑:顺便说一句,我跟随this tutorial
答案 0 :(得分:0)
多次尝试后,我决定使用不同的数据库从头开始。我发现连接器不接受的字段的一些名称。所以不要使用下划线,比如water_line_psi,我建议尝试使用waterLinePSI或类似的,以避免这些并发症。再一次,我不知道这是不是确切的问题,但我现在已经开始工作,这是我唯一看到的不同。
答案 1 :(得分:0)
我遇到了这个错误。事实证明,我没有将命令类型声明为存储过程。 我添加了这一行,它是固定的。
command.CommandType = CommandType.StoredProcedure;