关于OleDb处理MySQL的问题

nonesharp 2007-09-27 09:55:01
小弟尝试在OleDB下连接MySQL,按照网上的提示,去装了一个Oledb的驱动,MyOLEDB3,是从mysql.com下载的,然后问题也来了,查询正常,但是删改都出错,我将代码最简化,如下

OleDbConnection con = new OleDbConnection("Provider=MySqlProv.3.0;Server=localhost;User ID=root;Data Source=test;");
con.Open();
string cmdText = "Delete From Test Where Id = ? ";
OleDbCommand command = new OleDbCommand(cmdText, con);
command.Parameters.Add("@Id", OleDbType.Integer).Value = 15;
command.ExecuteNonQuery();

最后在command.ExecuteNonQuery();这一句报错,错误信息:“MySqlProv.3.0”失败,没有可用的错误消息,结果代码: E_ABORT(0x80004004)。

很奇怪,不知道为什么,同样的代码在SQL下面不会有问题,也很惊讶为什么添加没有出错,后来发现,添加只有一个varchar的传值,Id是自增的,所以不会出错,于是我尝试在 command.Parameters.Add("@Id", OleDbType.Integer).Value = 15 中将OleDbType.Integer改为OleDbType.Varchar,居然通过了,功能也实现了,但是我的Id确实是Int型的呀,这怎么会通过呢?
太奇怪了

不死心,于是我写死 string cmdText = "Delete From Test Where Id = 15 "; 不传参,正确,没有问题,然后,我改成 int i = 15;
string cmdText = "Delete From Test Where Id = " + i ; 也正确
那好,现在问题锁定在 command.Parameters.Add("@Id", OleDbType.Integer).Value = 15; 这一句上了,难道MySQL的传参有特殊的写法?同样的写法在SQL下面没有任何问题呀。
...全文
1688 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tualatin5200 2007-09-27
  • 打赏
  • 举报
回复
不是,我都试过,sql本身是没有问题的,有问题的就是那个 Parameters
ben_bear 2007-09-27
  • 打赏
  • 举报
回复
string cmdText = "Delete From Test Where Id = ? ";

应该是string cmdText = "Delete From Test Where Id = ?id ";
吧~
Tualatin5200 2007-09-27
  • 打赏
  • 举报
回复
我怀疑除了和string相对应的类型,比如varchar,正常以外,其他的都会有问题的,比如bool,还有楼主说的date
liusong_china 2007-09-27
  • 打赏
  • 举报
回复
学习
nonesharp 2007-09-27
  • 打赏
  • 举报
回复
datetime也有问题:(
不知道应该如何正确写
Tualatin5200 2007-09-27
  • 打赏
  • 举报
回复
据说mysql的要写成 command.Parameters.Add("?Id", OleDbType.Integer,4,"Id").Value = 15; //用?而不是 @ 
但是我试过,也不行,不知道有没有即懂mysql又懂C#的大哥呀
Tualatin5200 2007-09-27
  • 打赏
  • 举报
回复
我也碰到过呀,很奇怪为什么mysql里面int可以定义长度,我试了一下楼主的方法,和我原来的差不多,我原来将mysql里面int定义为4,然后试过 command.Parameters.Add("@Id", OleDbType.Integer,4,"Id").Value = 15; 也没有任何作用,当年就没找到解决的办法
北京的雾霾天 2007-09-27
  • 打赏
  • 举报
回复
我查了一下MySql的INT类型和C#的是一样的,都是范围都是-2,147,483,648 到 2,147,483,647

是不是楼和在MySql里使用的不是Int类型呢?
北京的雾霾天 2007-09-27
  • 打赏
  • 举报
回复
是不是整数位数不一致呢,MySql不是32位的整数?
北京的雾霾天 2007-09-27
  • 打赏
  • 举报
回复
关注一下。
twtusrso 2007-09-27
  • 打赏
  • 举报
回复
正好碰到此问题,顶起~~~~~
grandstorm 2007-09-27
  • 打赏
  • 举报
回复
顶~~~~~~~~~~ 同求
nonesharp 2007-09-27
  • 打赏
  • 举报
回复
up
Tualatin5200 2007-09-27
  • 打赏
  • 举报
回复
我怀疑也是驱动匹配的问题,唉,麻烦
Tualatin5200 2007-09-27
  • 打赏
  • 举报
回复
恩,谢谢hbxtlhx了,这个驱动我试过了,就不是OLEDB的了,是用了一个专门的借口MySqlClient,类似SqlClient
chuxue1342 2007-09-27
  • 打赏
  • 举报
回复
也有可能是驱动不匹配吧!!
北京的雾霾天 2007-09-27
  • 打赏
  • 举报
回复
按下面的地址下载一个MySql的驱动:

ADO.NET Driver for MySQL (Connector/NET)
http://www.mysql.com/products/connector/
挺好用的。
qqxiaolianghai 2007-09-27
  • 打赏
  • 举报
回复
Tualatin5200 2007-09-27
  • 打赏
  • 举报
回复
恩,看到老外有这种写法
OleDbParameter p = new OleDbParameter();
p.Value = 14;
p.DbType = DbType.Int32;
p.Direction = ParameterDirection.Input;
但是试了一下,好像也不行,不知道是不是mysql版本的问题

110,536

社区成员

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

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

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