更新循环中的表
本文关键字:循环 更新 | 更新日期: 2023-09-27 18:34:17
我正在尝试在 c# for 循环和 if 语句中更新一个 mysql 表,以及一些 if 语句。当使用断点运行时,它将运行一次 executenonquery,但下一个循环不会命中该断点。即使我点击非查询,它也不会更改表信息。
FFI 字符串是我的表中列的名称,字符串 val 是我想放入的内容。我知道这不是安全的方法,但当我能让它以应有的方式工作时,我会改变它。更新的代码现在每次都应该运行 NONQUERY,但仍然没有更新表法典:
for (a = 0; a <= z; a++)
{
if (ds3.Tables[0].Rows[a][1].ToString() == dataGridView1.Rows[i].Cells[0].Value.ToString())
{
if (ds3.Tables[0].Rows[a][2].ToString() == dataGridView1.Rows[i].Cells[1].Value.ToString())
{
if (ds3.Tables[0].Rows[a][3].ToString() == dataGridView1.Rows[i].Cells[2].Value.ToString())
{
MessageBox.Show("We have a match " + dataGridView1.Rows[i].Cells[0].Value.ToString() + " " + dataGridView1.Rows[i].Cells[1].Value.ToString() + " " + dataGridView1.Rows[i].Cells[t].Value.ToString());
try
{
string ffi = textBox1.Text;
decimal val = decimal.Parse(dataGridView1.Rows[i].Cells[t].Value.ToString());
MySqlCommand cmd = new MySqlCommand("Update spt_results SET " + ffi + " = " + val + " where project_Id =" + dataGridView1.Rows[i].Cells[0].Value.ToString() + "",connection2);
//cmd.Connection = connection2;'
// cmd.Connection.Open();
cmd.ExecuteNonQuery();
//cmd.Connection.Close();
}
catch
{
}
消息框确实显示每个循环,并且 connection2.open 每次都会运行感谢您的查看和帮助更新字符串运行时类似于"更新spt_results设置 FFI 300 = '15',其中project_Id =AAA007"
布伦特
看看你的代码:
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = // ... snip SQL injection invitation
connection2.Open();
cmd.ExecuteNonQuery();
connection2.Close();
MySqlCommand
没有连接。您正在打开和关闭连接,但它与命令无关。我实际上希望cmd.ExecuteNonQuery()
抛出异常,因为它没有连接......
请注意,您应该对命令和连接使用 using
语句,以确保即使遇到异常也能清理所有资源。
connection2.Open();
之后使用cmd.Connection = connection2;
。
当您尝试执行cmd.ExecuteNonQuery()
时,它会引发错误,因为没有与命令绑定的连接,并且错误被捕获在 catch 块中。您不知道,因为您没有在 catch 块中为错误做任何事情。
如果取消注释您的代码:连接已正确打开,您的代码应该可以工作。但我建议你在循环之前打开连接一次,最后关闭它。
另一点是你抓住了所有的异常,这并不好。问题可能出在查询上,请尝试在控制台或其他 MySQL 客户端中运行"更新spt_results设置 FFI 300 = '15',其中 project_Id =AAA007"。它将抛出错误。字段名称"FFI 300"必须用引号括起来,因为它包含空格,并且值"AAA007"必须作为字符串文本引用。试试这个查询 -
UPDATE spt_results SET `FFI 300` = '15' WHERE project_Id = 'AAA007'