我正在尝试在c#for循环内部更新mysql表,并尝试使用if语句更新几个if语句。在使用断点运行时,它将运行一次执行一次,但是下一个循环它不会触及它。即使我确实打了非查询,它也不会改变表信息。
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 SET FFI 300 ='15',其中project_Id = AAA007”
布伦特
答案 0 :(得分:5)
看看你的代码:
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = // ... snip SQL injection invitation
connection2.Open();
cmd.ExecuteNonQuery();
connection2.Close();
MySqlCommand
没有任何关联。您正在打开和关闭 连接,但它与命令无关。我实际上希望cmd.ExecuteNonQuery()
抛出异常,因为它没有连接...
请注意,您应该对命令和连接使用using
语句,以确保即使面对异常也可以清除所有资源。
答案 1 :(得分:3)
在cmd.Connection = connection2;
之后使用connection2.Open();
。
当您尝试执行cmd.ExecuteNonQuery()
时,它会引发错误,因为没有与命令绑定的连接,并且会在catch块中捕获错误。你没有认识,因为你没有在catch块中做任何错误。
答案 2 :(得分:0)
如果取消注释您的代码:连接已正确打开,您的代码应该可以运行。但是我建议你在循环之前打开一次连接,然后在结束时关闭它。
另一点是你捕获了所有异常,这并不好。问题可能在于查询,尝试在控制台或其他MySQL客户端中运行“更新spt_results SET FFI 300 ='15',其中project_Id = AAA007”。它会抛出一个错误。必须引用字段名称“FFI 300”,因为它包含空格,值“AAA007”必须引用为字符串文字。试试这个查询 -
UPDATE spt_results SET `FFI 300` = '15' WHERE project_Id = 'AAA007'