如何知道查询是否成功?

3

如何确定以下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个回答

9

您可以使用ExecuteNonQuery代替:

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

请注意,如果您的数据上有触发器,则可能无法反映您尝试插入的实际行数:ExecuteNonQuery可以执行任何类型的数据库操作,但不会返回任何结果集。调用存储过程时使用的任何输出参数将填充数据,并且可以在执行完成后检索。对于UPDATEINSERTDELETE语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为-1。通常情况下,如果查询遇到错误,您将收到一个MySqlException

谢谢你,sixlettervariables! - dotancohen

4

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();                    
            }
        }

我希望这能对您有所帮助。


2

如果失败,将抛出异常。异常对象通常包含有关出现了什么问题的信息(例如,“主键冲突”等)。

此外,对于 INSERT、UPDATE 或 DELETE,请使用 ExecuteNonQuery。返回值将包含受影响行数的数量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接