c# - 以编程方式检查 MySQL 状态是否正确?

标签 c# mysql

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

最佳答案

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

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

因此,如果您确实想检查 insert 语句是否插入了行(在这种情况下,提出这个问题通常是一个好主意,而不是问一个完全不同的问题),您可以简单地使用 ExecuteNonQuery 。它将返回

The number of rows affected.

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

因此,如果您必须执行完全未知的代码,那么可以这样做:只需执行您想要执行的语句,并处理可能发生的任何错误。

尽管通常,您不会允许用户输入他想要的任何语句。您可能有某种形式,用户可以在其中输入数据,然后可以在执行(准备好的)语句之前验证输入(例如检查整数是否确实是整数)或使用数据感知组件(这可能会进行数据库访问并键入自行验证)。如果发生错误(例如主键已存在或与服务器的连接丢失),请捕获并处理它(例如显示用户友好的错误消息,例如“抱歉,您要插入的用户已存在”)。

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

关于c# - 以编程方式检查 MySQL 状态是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44665553/

相关文章:

c# - C# 中的“向后”公钥/私钥加密,我该怎么做?

C# Process StandardInput 和 StandardOutput 与 FFmpeg 卡住

php - #1193 - 尝试登录 phpmyadmin 时出现未知系统变量 'lc_messages'

c# - 如何清除存档记录表中的重复条目

php - mysql 存储用户代理、推荐等的最有效方式

c# - 如何确保控件不在面板内?

c# - 无法确定条件表达式的类型?

c# - 在Windows服务中添加Trace文件

MySQL - 选择 3 个最高值并按字母顺序排序

mysql:如何删除字段开头或结尾的字符