如何知道查询是否成功?

时间:2012-03-07 18:48:38

标签: c# mysql

如何知道以下INSERT查询是否成功?

MySqlConnection connection = new MySqlConnection(ConnectionString);
connection.Open();
MySqlCommand command = new MySqlCommand("INSERT INTO People (PersonName, dateAdded) VALUES (?name, NOW())", connection);
command.Parameters.Add(new MySqlParameter("name", Name));
MySqlDataReader Reader = command.ExecuteReader();

我尝试运行Reader.Read()但只返回一个空字符串。感谢。

4 个答案:

答案 0 :(得分:9)

您改为使用ExecuteNonQuery

int affectedRows = command.ExecuteNonQuery();
if (affectedRows <= 0)
{
    // Houston, we have a problem.
}

请注意,如果您对数据有触发器,则可能无法反映您尝试{1}的实际行数:

  

您可以使用INSERT执行任何类型的数据库操作,但是返回的任何结果集都将不可用。调用存储过程时使用的任何输出参数都将填充数据,并可在执行完成后检索。对于ExecuteNonQueryUPDATEINSERT语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为DELETE

但是,一般情况下,如果您的查询遇到错误,您将收到MySqlException

答案 1 :(得分:4)

如果您正在执行INSERT,UPDATE或DELETE,请不要使用ExecuteReader。而是使用ExecuteNonQuery,它将返回受影响的行数。

请参阅http://dev.mysql.com/doc/refman/5.6/en/connector-net-tutorials-intro.html#connector-net-tutorials-sql-command

答案 2 :(得分:3)

在查询数据库时只使用SqlDataReader,SqlDataReader是一个快速转发指针,因此仅建议用于查询,使用SqlCommand的ExecuteNonQuery()方法,例如作为下一个代码:

using (SqlConnection conn = new SqlConnection("[QueryString]")) {
            using (SqlCommand cmd = new SqlCommand("SQL Command",conn)) {
                //here you return the number of affected rows
                int a = cmd.ExecuteNonQuery();                    
            }
        }

我希望,这可以帮到你。

答案 3 :(得分:2)

如果失败,将抛出异常。异常对象通常包含有关出错的信息(例如&#34;主键违规&#34;等等......)。

此外,使用ExecuteNonQuery进行INSERT,UPDATE或DELETE。返回的值将包含受影响的行数。