如何知道查询是否成功?

问题描述 投票:0回答:4

如何知道以下

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()
但只返回一个空字符串。谢谢。

c# mysql
4个回答
9
投票

您可以使用

ExecuteNonQuery
:

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

请记住,如果您对数据有触发器,它可能无法反映您尝试的实际行数

INSERT

您可以使用

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

但是,一般来说,如果您的查询遇到错误,您将收到

MySqlException


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


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
投票

失败会抛出异常。异常对象通常包含有关出错原因的信息(例如“主键违规”等)。

此外,使用

ExecuteNonQuery
进行插入、更新或删除。返回的值将包含受影响的行数。

© www.soinside.com 2019 - 2024. All rights reserved.