Unity WebGL通过ASP.NET Web API连接SqlServer数据库

最近公司有一个Web端的项目,基本需求是需要连接客户的SQL Server数据库获取数据,本人只对Unity比较熟练,对aps.net基础为零,到处查了好几天资料算是完成了项目需要的功能。中间遇到挺多坑,网上没找到这方面比较完整资料的。现在分享一下:

本文主要参考资料:https://blog.csdn.net/sinat_39291423/article/details/103402825?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5  特别感谢大神的分享

主要的步骤均在参考资料中,开始本人也是按照参考资料一步步做下来的;只不过在实现过程中遇到了一些问题,和不适用的地方做了些修改。

在按照大神的做法中有些地方遇到的主要问题:

1、asp.net web应用程序在vs编译器环境下运行时可能是因为安全性的问题Unity无法访问。需要发布出来之后布到IIs上,才能访问。因此编译器环境下无法测试,只能使用测试工具测试。

2、asp.net web应用程序编译器环境下可以连接SQLServer数据库时可以使用系统登录的方式,但是发布完成部署到IIS上时必须改成通过IP、user、psd登录的方式才能成功读取数据。修改方式很多,简单点就是直接更改配置文件connectionString="Data Source=192.168.1.10;Initial Catalog=SqlTest(数据库名称);User ID=sa;Password=decent;"

3、通过IP、user、psd登录时需要对Sql数据库进行配置,通过数据库配置管理器启动 TCP/IP协议服务,通过sqlserver management工具修改数据库的登录方式允许通过Sql server账户密码登录。这个网上步骤很多,就不详细写了。还需要修改部署到IIS上的工程上的一些的配置:打开IIS管理器,在应用程序池中找到部署的工程,在《高级设置》中修改《进程模型》中的《标识》类型为LocalSystem(这个也很重要,不改的话连不上数据库)

4、在资料的做法中读取数据,需要知道数据库表中所有的列名称,并且需要建立与数据库列表完全对应的数据类,有一点错误就会导致数据读取失败,而且没介绍怎样通过Sql语句读取数据库,数据操作很麻烦,查了半天资料后改成通过SQL语句的方式读取数据。主要改动提供api操作接口的类,即资料中的 StudentController.cs,这个类是专门与外部链接通信用的,增删改查接口都是在这个类中实现,起什么名字(XXXXController),链接地址就需要按类名写,大小写好像没啥关系,例如资料中的类名StudentController,后面发布完成后的链接地址就是 http://localhost:8091/api/student/,我的类名叫 DataController,链接地址就是http://localhost:8091/api/data/ 。具体改动如下:

    public class DataController : ApiController
    {
        //private Context db = new Context();


        //public IEnumerable<DataClass> Get()
        //{
        //    return db.Students.AsEnumerable();
        //}
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            try
            {
                SqlConnection sqlConnection = new SqlConnection("Data Source=192.168.1.10;Initial Catalog=SqlTest;Integrated Security=True;User Id=sa;Password=decent");
                sqlConnection.Open();
                string sql = "select * from DataClass";
                DataSet dataSet = new DataSet();
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, sqlConnection);
                sqlDataAdapter.Fill(dataSet);
                return JsonConvert.SerializeObject(dataSet);
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
        }

    }

上面的public IEnumerable<string> Get()方法主要是用于部署IIS后测试链接是否可用,不需要的可以删掉。重点是public string Get(int id)方法,部署到IIS后链接地址为http://localhost:8091/api/data/1 链接地址最后的这个”1"可以随便写啥都行,只要是int类型,1就是调用该方法传入的参数,也可以将get方法的参数改成str类型。现在SQL语句是写死查询某一个表,后续准备用这个参数传入SQL语句,就能实现更加灵活的查找数据了。

5、只按照上面的改完编译器环境下运行没啥问题,但是部署到IIS后测试发现还是读不到数据,无参数GET方法能正常返回,有参数的get返回的是错误提示  'NT AUTHORITY\\SYSTEM' 登录失败,到这asp.net web程序其实是没有问题了,只需要修改数据库中的配置就可以了,修改方式见:https://www.cnblogs.com/freedomwei/articles/9296853.html,其实就是给外部操作的权限。之后就可以在Unity中就可以间接的读取数据库了。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值