SQL语法错误,如何解决?

问题遇到的现象和发生背景

提示 string sql 后面语句有语法错误

问题相关代码,请勿粘贴截图
float a = 285;          
            string conStr = "server=DESKTOP-VAS78Q7\\SQLEXPRESS;database=db_test;uid=sa;pwd=123"; 
           SqlConnection conn = new SqlConnection(conStr);
            conn.Open();       
            string sql = "( select * from T4 where X11 <  '" + a + "' order by X11 desc limit 1 ) union( select * from T4 where X11 >  '" + a + "' order by X11 limit 1)";
            SqlCommand Cmd = new SqlCommand(sql, conn);
            SqlDataReader db = Cmd.ExecuteReader();n
            if (db.Read())
            {
                double x11 = Convert.ToDouble(db["X11"]);
                double y11 = Convert.ToDouble(db["Y11"]);
                conn.Close();
            }

运行结果及报错内容

SqlDataReader db = Cmd.ExecuteReader(); 其他信息: 关键字 'order' 附近有语法错误。

我的解答思路和尝试过的方法

我想要达到的结果

我需要实现想在C#中实现在数据库列X11中找到与数值a大小相邻的两个数。比如a=101,想查找出X11中100和105这两个数所在的行,X11为0 5 10 15等这样间隔的一串数据。并且把X11为100和105的行其他列数据读取出来。

"(select * from (select top 1 * from T4 where X11 <  '" + a + "' order by X11 desc) tt1) union (select * from (select top 1 * from T4 where X11 >  '" + a + "' order by X11) tt2)"

当使用union时
每段select不可以order by
必须最后一起排序