It appears that certain versions of ADO.NET can default to automatically enlisting a connection into an existing transaction. See http://msdn.microsoft.com/en-us/library/ms254973.aspx for more detail, but I expect somehow somewhere ADO is confused into thinking that there's an existing transaction going on to some other db.
解决办法:
连接字符串后面加上;AutoEnlist=false;
<add name="DB" connectionString="server=localhost;database=futures;uid=root;pwd=;allow zero datetime = true;charset='utf8';AutoEnlist=false;"/>
参考资料:
http://stackoverflow.com/questions/7265734/why-does-opening-a-connection-throw-a-distributed-transactions-error-in-mysql
http://www.cnblogs.com/nielsliu/articles/1280038.html
https://msdn.microsoft.com/en-us/library/ms254973.aspx
http://dev.mysql.com/doc/refman/5.1/en/connector-net-connection-options.html