C#对数据库进行新建表和删除表操作用ExecuteNonQuery执行成功却也返回0.这怎么知道成功与否?难道不exception就成功?(我是mysql)

qiuzhizhe8888 2016-05-05 10:13:13

try
{
String mysqlStr = "Database=mygame;Data Source=127.0.0.1;User Id=root;Password=root;pooling=false;port=3306";
MySqlConnection conn = new MySqlConnection(mysqlStr);
conn.Open();
// del
Console.WriteLine("删除数据库");
string sql = "drop table Test2";
MySqlCommand cmd = new MySqlCommand(sql, conn);
int result = cmd.ExecuteNonQuery();
}

catch (MySql.Data.MySqlClient.MySqlException ex)
{
Console.WriteLine("error " + ex.Message);
}





结果执行成功也返回0
...全文
402 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtnu200 2016-05-06
  • 打赏
  • 举报
回复
只有成功才会返回0,如果失败,那就是异常了,楼主这都分不清?
风吹腚腚凉 2016-05-06
  • 打赏
  • 举报
回复
引用 楼主 qiuzhizhe8888 的回复:

try
{
String mysqlStr = "Database=mygame;Data Source=127.0.0.1;User Id=root;Password=root;pooling=false;port=3306";
                MySqlConnection conn = new MySqlConnection(mysqlStr);
                conn.Open();
// del
                Console.WriteLine("删除数据库");
                string sql = "drop table Test2";
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                int result = cmd.ExecuteNonQuery();
}

catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                Console.WriteLine("error   " + ex.Message);
            }


结果执行成功也返回0
没出异常就是成功!
风吹腚腚凉 2016-05-06
  • 打赏
  • 举报
回复
引用 13 楼 sp1234 的回复:
[quote=引用 2 楼 qiuzhizhe8888 的回复:] [quote=引用 1 楼 feiyun_Web 的回复:] 这有什么不对吗? 删除表,理论上语句没有影响数据表的行,所以ExecuteNonQuery是返回0。
嗯,那有什么办法判断是否成功?[/quote] 返回 0 本身就说明成功了,你非要生硬地制造点问题出来?[/quote] 没出异常就是成功,我这句话对不?
  • 打赏
  • 举报
回复
引用 2 楼 qiuzhizhe8888 的回复:
[quote=引用 1 楼 feiyun_Web 的回复:] 这有什么不对吗? 删除表,理论上语句没有影响数据表的行,所以ExecuteNonQuery是返回0。
嗯,那有什么办法判断是否成功?[/quote] 返回 0 本身就说明成功了,你非要生硬地制造点问题出来?
songbing774933 2016-05-06
  • 打赏
  • 举报
回复
没有抛出异常就说明执行成功了啊,
如果没有抛出异常,又没有达到你的预期目标,那就是你SQL的问题了!

至于ExecuteNonQuery的返回值问题,这个是返回的受影响的行的数量,你直接新建表和删除表对行是没有实际影响的,不返回0返回多少呢。不信的话你换成执行一句增删改语句试试。

遇到问题了,永远先不要怀疑框架的问题,首先还是从自身着手。
换句话来说,你觉得是程序出BUG还是框架出BUG的可能性高呢?
J-xin 2016-05-06
  • 打赏
  • 举报
回复
抛出异常就是失败,不抛就是成功
我是飞云 2016-05-06
  • 打赏
  • 举报
回复
引用 2 楼 qiuzhizhe8888 的回复:
[quote=引用 1 楼 feiyun_Web 的回复:] 这有什么不对吗? 删除表,理论上语句没有影响数据表的行,所以ExecuteNonQuery是返回0。
嗯,那有什么办法判断是否成功?[/quote] 抛出异常就是失败,不抛就是成功。
qiuzhizhe8888 2016-05-05
  • 打赏
  • 举报
回复
引用 1 楼 feiyun_Web 的回复:
这有什么不对吗? 删除表,理论上语句没有影响数据表的行,所以ExecuteNonQuery是返回0。
嗯,那有什么办法判断是否成功?
我是飞云 2016-05-05
  • 打赏
  • 举报
回复
这有什么不对吗? 删除表,理论上语句没有影响数据表的行,所以ExecuteNonQuery是返回0。
xuzuning 2016-05-05
  • 打赏
  • 举报
回复
MySQL 是通过 mysql_errno()、mysql_error() 函数发还错误的 只要你 不直接 Console.WriteLine("error " + ex.Message); 就没有什么不好看的 人家封装的东西,总是不能令你十分满意的 而自己封装的话,又会被人家批评为:重复制造轮子
qiuzhizhe8888 2016-05-05
  • 打赏
  • 举报
回复
引用 5 楼 oysy 的回复:
删除前,获取行数 删除后,再获取行数 懂了吧?
搞笑。我是删整个表,不是删几行
qiuzhizhe8888 2016-05-05
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
操作失败是有异常的,不知你怎么处理的 嗯,你有 Console.WriteLine("error " + ex.Message); 不就是了
我标题已经说了,感觉这样的代码很难看。不知有没有能返回结果的方式
xuzuning 2016-05-05
  • 打赏
  • 举报
回复
操作失败是有异常的,不知你怎么处理的 嗯,你有 Console.WriteLine("error " + ex.Message); 不就是了
飞天凤凰601 2016-05-05
  • 打赏
  • 举报
回复
删除前,获取行数 删除后,再获取行数 懂了吧?
qiuzhizhe8888 2016-05-05
  • 打赏
  • 举报
回复
引用 3 楼 u012202391 的回复:
实在不行就再查一下这个表存在不
我是想求个优雅的方式。解决方法能想到的,感觉很low
下雨天抽烟 2016-05-05
  • 打赏
  • 举报
回复
实在不行就再查一下这个表存在不

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧