2017-06-21 83 views
0

在我的项目中,我想检查MySQL状态语句是否正确与C#,如何做到这一点,MySQL是否有一个API,可以让我检查状态语法。 非常感谢。检查MySQL状态是否正确或不是以编程方式?

+1

如果你想纯粹检查SQL语法,你可以试试这个网站[MySQL Syntax Check](https://www.piliapp.com/mysql-syntax-check/)。如果要测试语法是否适用于特定的数据库/查询,则需要创建一个测试数据库/表并使用它进行测试。 –

+0

我正在使用C#,在我的项目中,我需要用C#编程检查它。它是如何实施的? – wqq

+0

那么,你可以在这里发布部分/全部的mysql,我相信我们可以帮助验证它是否有正确的语法(如果它包含敏感信息,请更改它),或者在C#中,可以使用[try/catch ](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/try-catch)来检查是否有任何错误(您仍然需要运行代码并执行sql一次检查它是否有效,首先尝试测试语句)。 –

回答

0

您可以使用prepared statements来执行此操作。通过抛出错误或不抛出错误,它会告诉你SQL语法是否正确,是否支持该确切的服务器版本,即使存在涉及的表和列,这不仅仅是一种纯粹的语法验证。

但是,根据您的评论,您实际上试图告诉您的代码是否(或所有)成功插入(全部)行,并且这不会以这种方式工作:仅验证语法不会验证您的数据是插入是有效的。即使该声明是正确的,您可能会尝试将stringfloat值插入integer列或乘以string列。或者你可能违反约束条件,例如将null插入声明为not null的列或违反外键或唯一键约束。它也可以取决于服务器配置;例如插入日期0000-00-00可能被允许或不允许,并且无效的数据可能导致一台服务器发生错误,而另一台服务器只会发出警告。

所以如果你真的想检查一条insert语句是否插入了行(在这种情况下,询问一下,而不是询问完全不同的问题通常是个好主意),那么你可以简单地使用ExecuteNonQuery。它将返回

受影响的行数。

在简单情况下,这将是插入行的数量。如果您使用例如触发器或on duplicate key update,它会包含它们的效果,但通常,您甚至不需要确切的值,并且只会检查它是否为> 0。另一方面,并​​非每个insert语句都必须插入行才能正确;例如一个基于某些标准将插入缺失行的查询显然做得很好,即使它没有插入一行也仅仅是因为没有行丢失。所以如果你必须执行完全未知的代码,这是要走的路:简单地执行你想执行的语句,并处理任何可能发生的错误。

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

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

+0

谢谢你的回答,你的回答帮助我想出其他不同的想法。非常感谢你。 – wqq

相关问题