同样语句在Mysql可视化操作工具内执行成功,但是在c#的MySqlCommand对象的ExecuteReader方法瞎几把报错

qq_35457839 2017-09-18 12:31:15
代码如下

public static List<string[]> Select(string SqlUser, string SqlPsd, string Sqlcmd, string dbo,string sqlName)
{
MySqlConnection con = new MySqlConnection("Database='" + sqlName + "';Data Source='localhost';User Id='" + SqlUser + "';Password='" + SqlPsd + "'");
con.Open();
MySqlCommand cmd = new MySqlCommand("select * from " + dbo + " where (" + Sqlcmd + ")", con);
MySqlDataReader a = cmd.ExecuteReader();
List<string[]> Read = new List<string[]>();
while (a.Read())
{
List<string> b = new List<string>();
for (int i = 0; i < a.FieldCount; i++)
{
b.Add(a[i].ToString());
}
Read.Add(b.ToArray());
}
a.Close();
cmd.Dispose();
con.Close();
return Read;
}

要执行的语句是select * from 登录 where (1=1)
在MySqlDataReader a = cmd.ExecuteReader();报错:

[size=7px]发生了 MySql.Data.MySqlClient.MySqlException
HResult=0x80004005
Message=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?? where (1=1)' at line 1
Source=MySql.Data
StackTrace:
在 MySql.Data.MySqlClient.MySqlStream.ReadPacket()
在 MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
在 MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
在 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
在 MySql.Data.MySqlClient.MySqlDataReader.NextResult()
在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
在 ChinaMineCraft_Server_2._0.Sql.Select(String SqlUser, String SqlPsd, String Sqlcmd, String dbo, String sqlName) 在 C:\Users\姬逍遥\documents\visual studio 2017\Projects\ChinaMineCraft Server 2.0\ChinaMineCraft Server 2.0\Sql.cs 中: 第 18 行
在 ChinaMineCraft_Server_2._0.Form1.Form1_Load(Object sender, EventArgs e) 在 C:\Users\姬逍遥\documents\visual studio 2017\Projects\ChinaMineCraft Server 2.0\ChinaMineCraft Server 2.0\Form1.cs 中: 第 42 行
在 System.Windows.Forms.Form.OnLoad(EventArgs e)
在 System.Windows.Forms.Form.OnCreateControl()
在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
在 System.Windows.Forms.Control.CreateControl()
在 System.Windows.Forms.Control.WmShowWindow(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
在 System.Windows.Forms.Form.WmShowWindow(Message& m)
在 System.Windows.Forms.Form.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)[/size]
这样子报错

但是mysql可视化操作软件却执行正常
...全文
462 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-09-18
  • 打赏
  • 举报
回复
表名不能为中文,一定要用的话需转义:from `登录` 并且要与 MySQL 默认字符集一致
cancerser 2017-09-18
  • 打赏
  • 举报
回复
把 表名改成英文的
qq_35457839 2017-09-18
  • 打赏
  • 举报
回复
引用 7 楼 hanjun0612 的回复:
登录改成 `登录`试试呢?
发生了 MySql.Data.MySqlClient.MySqlException HResult=0x80004005 Message=Can't find file: '.\chinaminecraft\@003f@003f.frm' (errno: 22 - Invalid argument) Source=MySql.Data StackTrace: 在 MySql.Data.MySqlClient.MySqlStream.ReadPacket() 在 MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId) 在 MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId) 在 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) 在 MySql.Data.MySqlClient.MySqlDataReader.NextResult() 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 在 ChinaMineCraft_Server_2._0.Sql.Select(String SqlUser, String SqlPsd, String Sqlcmd, String dbo, String sqlName) 在 C:\Users\姬逍遥\documents\visual studio 2017\Projects\ChinaMineCraft Server 2.0\ChinaMineCraft Server 2.0\Sql.cs 中: 第 18 行 在 ChinaMineCraft_Server_2._0.Form1.Form1_Load(Object sender, EventArgs e) 在 C:\Users\姬逍遥\documents\visual studio 2017\Projects\ChinaMineCraft Server 2.0\ChinaMineCraft Server 2.0\Form1.cs 中: 第 42 行 在 System.Windows.Forms.Form.OnLoad(EventArgs e) 在 System.Windows.Forms.Form.OnCreateControl() 在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在 System.Windows.Forms.Control.CreateControl() 在 System.Windows.Forms.Control.WmShowWindow(Message& m) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ScrollableControl.WndProc(Message& m) 在 System.Windows.Forms.Form.WmShowWindow(Message& m) 在 System.Windows.Forms.Form.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
qq_35457839 2017-09-18
  • 打赏
  • 举报
回复
引用 4 楼 qq_35457839 的回复:
[quote=引用 3 楼 xuzuning的回复:]表名不能为中文,一定要用的话需转义:from `登录` 并且要与 MySQL 默认字符集一致
可是我设置了utf-8了啊,而且在mssql里面中文表名完全没毛病[/quote] emmmmmmmm 发生了 MySql.Data.MySqlClient.MySqlException HResult=0x80004005 Message=Can't find file: '.\chinaminecraft\@003f@003f.frm' (errno: 22 - Invalid argument) Source=MySql.Data StackTrace: 在 MySql.Data.MySqlClient.MySqlStream.ReadPacket() 在 MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId) 在 MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId) 在 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) 在 MySql.Data.MySqlClient.MySqlDataReader.NextResult() 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 在 ChinaMineCraft_Server_2._0.Sql.Select(String SqlUser, String SqlPsd, String Sqlcmd, String dbo, String sqlName) 在 C:\Users\姬逍遥\documents\visual studio 2017\Projects\ChinaMineCraft Server 2.0\ChinaMineCraft Server 2.0\Sql.cs 中: 第 18 行 在 ChinaMineCraft_Server_2._0.Form1.Form1_Load(Object sender, EventArgs e) 在 C:\Users\姬逍遥\documents\visual studio 2017\Projects\ChinaMineCraft Server 2.0\ChinaMineCraft Server 2.0\Form1.cs 中: 第 42 行 在 System.Windows.Forms.Form.OnLoad(EventArgs e) 在 System.Windows.Forms.Form.OnCreateControl() 在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在 System.Windows.Forms.Control.CreateControl() 在 System.Windows.Forms.Control.WmShowWindow(Message& m) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ScrollableControl.WndProc(Message& m) 在 System.Windows.Forms.Form.WmShowWindow(Message& m) 在 System.Windows.Forms.Form.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 报错
qq_35457839 2017-09-18
  • 打赏
  • 举报
回复
引用 10 楼 qq_20076719的回复:
你也知道那是微软。。这是mysql,微软能做的一大堆mysql没法很轻松实现
可是mssql装起来烦,别人不愿意装
qq_20076719 2017-09-18
  • 打赏
  • 举报
回复
你也知道那是微软。。这是mysql,微软能做的一大堆mysql没法很轻松实现
shoppo0505 2017-09-18
  • 打赏
  • 举报
回复
应该还是你的sql语句不对. 你在debug的时候,设置端点在那里,然后直接复制出来sql语句去数据库执行. 猜测可能是1=1条件没有给入.
qq_35457839 2017-09-18
  • 打赏
  • 举报
回复
引用 8 楼 lijin_csdn的回复:
把表名改成英文的 。。。
我已经设置数据库为utf-8模式,而且微软的mssql sql server里面什么字符都可以啊
lijin_csdn 2017-09-18
  • 打赏
  • 举报
回复
把表名改成英文的 。。。
正怒月神 2017-09-18
  • 打赏
  • 举报
回复
登录改成 `登录`试试呢?
xiaoqiang_gao 2017-09-18
  • 打赏
  • 举报
回复
表名中文
qq_35457839 2017-09-18
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505的回复:
应该还是你的sql语句不对. 你在debug的时候,设置端点在那里,然后直接复制出来sql语句去数据库执行. 猜测可能是1=1条件没有给入.
select * from 登录 where (1=1)这句话就是从cmd对象里面找出来复制的
qq_35457839 2017-09-18
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning的回复:
表名不能为中文,一定要用的话需转义:from `登录` 并且要与 MySQL 默认字符集一致
可是我设置了utf-8了啊,而且在mssql里面中文表名完全没毛病

110,533

社区成员

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

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

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