2017-02-26 81 views
-2

我想使用参数化插入到SQL查询中。我已经使用这个代码,但是我得到一个 '致命' 的错误:INSERT INTO MySQL语句错误C#

An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll

Additional information: Fatal error encountered during command execution.

C#代码:

 using(MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;database=project;username=root;password=***;")) 
     { 
      MySqlCommand cmd = new MySqlCommand("INSERT INTO test_results (test_results) VALUES (@testResults);"); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = connection; 
      cmd.Parameters.AddWithValue("@test_results", correctAnswers); 
      connection.Open(); 
      cmd.ExecuteNonQuery(); 
      cmd.Connection = connection; 
     } 

线:

cmd.ExecuteNonQuery(); 

我想补充的问题的数量(correctAnswers)用户正确进入“test_results”字段

编辑:

int topicID = dataGridViewRow.Cells["topicID"].Value.ToString(); 

cannot implicitly convert type string to int

我知道为什么我收到这个,但我不知道我应该做的。

+7

我填充时,怀疑你会发现有更多的信息,在异常,如果你仔细看,我怀疑这是因为你叫语句中的参数'@ testResults'和'@ test_results' 。 –

+0

所以我应该如何修改我的代码来解决这个问题? – CsharpStudent

+4

恩,使用一致的名字?仔细阅读我的评论,仔细阅读您的代码,并仔细考虑参数化SQL的工作原理。如果您的SQL中的名称与您的'Parameters'集合中的参数名称不匹配,您如何期待它的工作? –

回答

2

当您为该参数设置值时,参数名称必须相同。

 using(MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;database=project;username=root;password=***;")) 
    { 
     MySqlCommand cmd = new MySqlCommand("INSERT INTO test_results (test_results) VALUES (@testResults);"); 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = connection; 
     cmd.Parameters.AddWithValue("@testResults", correctAnswers); 
     connection.Open(); 
     cmd.ExecuteNonQuery(); 
     cmd.Connection = connection; 
    } 
+0

@Huesyn Alizada你可以检查我编辑的问题的底部:) plz – CsharpStudent

+0

你应该将其转换为int。像这样改变你的代码'int topicID = Convert.ToInt32(dataGridViewRow.Cells [“topicID”]。Value); ' – 2017-02-26 16:39:32

+0

很好,干得好 – CsharpStudent