mysql 查询语句问题 set @Id := 9;select * from `table` WHERE `Id`=@Id;

chaoking320 2011-04-27 06:13:35
set @Id := 9;select * from `table` WHERE `Id`=@Id;该句在mysql中执行正确。
但是用.net封装的数据库对象执行就出现异常:
cmd.commandtext = sql语句;
cmd.commandtype = commandtype.text;
cmd.ExecuteScalar();//这样的话在执行的时候会出错。


异常信息为:

at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)



ps,mssql类似的有变量的sql语句通过.net是可以执行成功的,但是mysql有变量的查询在.net中却不能执行成功,是不是.net不支持mysql包含变量的sql语句啊?!
...全文
412 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2011-05-12
  • 打赏
  • 举报
回复
.net和sqlserver是一家人 兼容性当然最好
chaoking320 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 shine333 的回复:]
引用楼主 chaoking 的回复:
set @Id := 9;select * from `table` WHERE `Id`=@Id;该句在mysql中执行正确。


问个问题,如果这个代码只是抛砖引玉的话,那么两种可能:
1 前面计算Id的代码太复杂,仍然有两种可能:
a) 数据库可能要重新设计,简化计算过程
b) 一定不能存储过程的话,相关计算过程请放入.net代码中
……
[/Quote]


受教!
其实我就是感觉奇怪而已,sqlserver的语句在.net中可以运行的,但是mysql的语句在.net中不能运行了,仅此而已,我只是想弄清楚为什么有的mysql语句在mysql库中执行是可以的,但是到了.net中就不行了。
再次感谢你的讲解。
iihero 2011-05-05
  • 打赏
  • 举报
回复
cmd.ExecuteScalar()
估计你得用cmd.ExecuteReader()
shine333 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 chaoking 的回复:]
set @Id := 9;select * from `table` WHERE `Id`=@Id;该句在mysql中执行正确。
[/Quote]

问个问题,如果这个代码只是抛砖引玉的话,那么两种可能:
1 前面计算Id的代码太复杂,仍然有两种可能:
a) 数据库可能要重新设计,简化计算过程
b) 一定不能存储过程的话,相关计算过程请放入.net代码中

2 就是简单的select * from `table` WHERE `Id`= 变量的话,SqlCommand+SqlParameter要做的事情,何必使用mysql变量


BTW,个人不是太喜欢存储过程,但不完全排斥。这与能否迁移无关,只是存储过程不能用到好的API,不能使用缓存、多线程等优化手段。而且,我深信,好的效率更多是在设计表结构的时候就决定了的,靠存储过程替代程序代码,优化不了多少性能。
chaoking320 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iihero 的回复:]
cmd.ExecuteScalar()
估计你得用cmd.ExecuteReader()
[/Quote]

cmd.Text = "set @Id=9;select @Id;";
cmd.ExecuteReader();

还是报那个异常!!!
chaoking320 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rucypli 的回复:]
写到存储过程里
[/Quote]

由于,我们的系统统一规定不用存储过程——方便多数据库转换,所以、、、
谢谢你~
ACMAIN_CHM 2011-05-04
  • 打赏
  • 举报
回复
那试一下 set @Id=9;select @Id;
chaoking320 2011-05-04
  • 打赏
  • 举报
回复
select 1; select 1;是可以执行的。

什么原因呢?》?》!
ACMAIN_CHM 2011-04-29
  • 打赏
  • 举报
回复
你试试
select 1; select 1;

是否能够执行,估计是不允许执行多条语句。
chaoking320 2011-04-29
  • 打赏
  • 举报
回复
奇怪的是 我在mysql数据库中运行是通过的,但是到.net里面就出现问题,这是什么原因呢?
zuoxingyu 2011-04-27
  • 打赏
  • 举报
回复
这样的代码块需要写到存储过程里。
rucypli 2011-04-27
  • 打赏
  • 举报
回复
写到存储过程里

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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