检查MySQL状态是否正确?

时间:2017-06-21 01:42:39

标签: c# mysql

在我的项目中,我想用C#检查MySQL状态语法是否正确,如何做到这一点,MySQL是否有一个API可以让我检查状态语法。 非常感谢你。

1 个答案:

答案 0 :(得分:0)

您可以使用prepared statements执行此操作。无论是否抛出错误,它都会告诉您sql语法是否正确,是否由该确切的服务器版本支持,即使所涉及的表和列存在,这不仅仅是纯语法验证所能做到的。

但是,根据您的评论,您实际上是在尝试判断您的代码是否(或确实)成功插入(所有)行,这将不会以这种方式工作:仅验证语法将无法验证您的数据要插入的tyring是有效的。即使声明正确,您也可以尝试将stringfloat值插入integer列或乘以string列。或者你可以违反限制,例如将null插入声明为not null的列或违反外键或唯一键约束的列。它还可以依赖于服务器配置;例如可能允许或不允许插入日期0000-00-00,无效数据可能导致一台服务器出错,而另一台服务器出现警告。

因此,如果你真的想检查一个insert语句是否插入了行(在这种情况下,通常最好不要问一个完全不同的问题),你可以简单地使用{{3} }。它会返回

  

受影响的行数。

在简单的情况下,这将是插入的行数。如果您正在使用例如触发器或on duplicate key update,它将包括它们的效果,但通常,您甚至不需要确切的值,并且只会检查它是> 0。另一方面,并​​非每个insert语句都必须插入行才能正确;例如一个基于某些critera插入缺失行的查询显然做得很好,即使它没有插入单行只是因为没有行丢失。

因此,如果您必须执行完全未知的代码,则可以采用以下方法:只需执行要执行的语句,并处理可能发生的任何错误。

虽然通常情况下,您不会允许用户输入他想要的任何声明。您可能有一些用户输入数据的表单,然后您可以在执行(准备好的)语句之前验证输入(例如,检查整数是否真的是整数)或使用数据感知组件(可能会进行数据库访问和类型)自己验证)。如果发生错误(例如主密钥已经存在或与服务器的连接丢失),请捕获并处理它(例如,显示用户友好的错误消息,例如“抱歉,您插入的用户已经存在”)。

如果您确实需要在执行之前检查包含数据验证的语句,则可以启动事务,使用ExecuteNonQuery,将其回滚并评估结果/错误。但请记住,结果在不同的时间点可能不一样 - 在您测试之后,其他人可能会有例如使用您尝试插入的主键插入或删除一行。