小弟尝试在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下面没有任何问题呀。
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下面没有任何问题呀。
解决方案 »
- C# 类库怎么引用session
- 学了七八天delegate和event了,就是不懂。天生愚钝吗?请指点迷津。
- DAL层使用ORM时设计的Domain怎样连接到BLL层的Model?
- 有点小问题
- sqlserver2000运行时右下角出现的小图标,在2005下怎么样才能出现?
- (Winform)怎样设置DataGrid某一个单元格内的Combobox控件为可用或不可用呢?
- 请问哪位大侠做过网址过滤的东东?
- 请高手推荐本C#书籍,我有很好的Java基础
- 爱动脑筋的跟我来^_^
- 怎样将DataTable里的对象元素组装回来,放到ArrayList里成其元素??
- C#NET 关于数据绑定
- 将数据库中integer类型的值转化成int报错。
但是我试过,也不行,不知道有没有即懂mysql又懂C#的大哥呀
不知道应该如何正确写
吧~
OleDbParameter p = new OleDbParameter();
p.Value = 14;
p.DbType = DbType.Int32;
p.Direction = ParameterDirection.Input;
但是试了一下,好像也不行,不知道是不是mysql版本的问题
http://www.mysql.com/products/connector/
挺好用的。