主机与虚拟机通信:以主机VS2010连接虚拟机MySql为例

1.首先解决环境配置、网络互相通信的问题:

  主机:Win7 32bit。虚拟机 Winxp 32bit(不要鄙视我不大会用unix之类的东西)。使用virtualBox安装。

  网络:虚拟机配置成Bridged Adapter 桥接模式,使用无线网卡(好像还有种叫法叫网桥模式,我不大搞得清楚)。关于虚拟机网络配置的问题参见:http://www.cnblogs.com/adforce/archive/2013/10/11/3363373.html

     主机无线网卡连接无线。IP信息如下右侧:

     

因为host与virtual都连接上了同一无线路由器,所以两台机器自然就在同一网段了。(很奇怪的是他们的IP地址第三段分别是60和61,不一样。我想可能是是因为IP~网关~子网掩码的关系吧,我不是很懂所以不管)。

之后,无论是host ping virtual还是相反,都是通的。并且两机器上网正常。

 2.以主机VS2010连接虚拟机MySql为例,使用EFToMySql做个ORM小控制台程序,读取数据库信息。

    1在虚拟机上安装Mysql,以及数据库管理程序(在这里我使用MySQL Workbench 5.2 CE),为了省却一些配置、安装,直接安装mysql-installer-5.5.16.0.msi,内含Mysql,workbench以及其示例数据库、其他必备的东西、类库,可能需要再次上网下载。装完后使用合适的账号密码就可以用workBeach对Mysql进行操作了,就像SQL Server Management Studio操作SQL Server一样。界面稍有不同,但是差不多,熟悉、习惯下可以用了。界面如图。

    2.使用workbench配置Mysql使之可以通过远程客户机(即主机)连接到安装有Mysql的机器(即本虚拟机)。需要授权。参见http://www.cnblogs.com/smallstone/archive/2010/04/29/1723838.html

       默认情况下,Mysql不能支持远程连接,不像SQL SERVER那样只要点个选项“允许远程连接”就可以了。

        ①点击上图的右下角“Server Adminstration”部分-》Manege Security   

   ②按如下填入,%即授权按任意计算机输入root以及密码后均可连接MYSQL,点击Apply去人应用。见图:

    3.主机已经安装有VS2010,在安装mysql-connector-net-6.3.5插件(新版本不集成连接器需要单独下载),是个Entity Framework ToMySql工具。选择典型安装,安装完成之后会集成进VS。

     4.写程序。打开VS2010新建个类库,新建实体模型,数据库连接方式是刚安装的Mysql,输入虚拟机的IP地址、Mysql用户名密码。

  

之后便生成实体框架模型,后缀EDMX。

新建控制台,写个小程序遍历表内容,务必将实体模型类库中的App.Config中的数据库连接串复制到控制台app.config中。

这个字符串前半部分稍有奇怪,可以参考http://blog.csdn.net/tangsilai/article/details/16924937

 

 <connectionStrings>
    <add name="sakilaEntities" connectionString="metadata=res://*/Sakila.csdl|res://*/Sakila.ssdl|res://*/Sakila.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;User Id=root;password=123456;Persist Security Info=True;database=sakila;Interactive Session=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
View Code

 

控制台代码截图如下:

//本程序用测试EfToMysql实体框架的有效性
//在控制台输出actor单表的前10条记录,无外表查询
using System;
using System.Linq;
using EFToMysql;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            sakilaEntities s = new sakilaEntities();
            var query = s.actors.Take(10).ToList();
            foreach (var q in query)
            {
                Console.WriteLine(string.Format("{0},{1},{2},{3}", q.actor_id, q.first_name, q.last_name, q.last_update));
            }
            
        }
    }
}
View Code

 直接运行就可以看到结果了。

 

        至此,已完成主机~虚拟机通信。

 

posted on 2014-06-14 23:07  nlh774  阅读(550)  评论(0编辑  收藏  举报