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

回答

9

您改用ExecuteNonQuery

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

请记住,如果你对数据触发器,它可能不反映实际的行数你试图INSERT

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

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

+0

谢谢sixlettervariables! – dotancohen 2012-03-07 19:18:47

2

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

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

+0

谢谢Branko。 – dotancohen 2012-03-07 19:19:03

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

我希望,这可以帮助你。

相关问题