SQLServer · 最佳实践 · 开发基于.NET CORE的LINUX版本的数据库应用



title: SQLServer · 最佳实践 · 开发基于.NET CORE的LINUX版本的数据库应用

author: 石沫

背景

最近有客户在基于.NET CORE的LINUX版本连接数据库的应用程序,在开发中,会遇到一些问题,客户会错误地将原因定位到我们的SQL SERVER,陆续收到一些工单,因此,我们需要有计划增强这个方面的能力,同事正确引导用户使用SQL SERVER。

部署环境

1. 服务器版本:ubuntu 14.04

2. .NET CORE 版本:1.0

3. 安装过程

3.1 增加 dotnet apt-get feed

sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
sudo apt-get update

3.2 安装.NET Core SDK

sudo apt-get install dotnet-dev-1.0.0-preview2-003131

https://www.microsoft.com/net/core#ubuntu

开发第一个数据库应用程序

1. 创建文件夹

mkdir SqlConnect

2. 创建源码文件及编写内容

使用的是C#语言,连接的数据库是RDS for SQL SERVER 2008 R2,有GITHUB上文章介绍,连接SQL SERVER 2008 R2需要SP3,但实际上是不需要的。这个客户会误解!

touch DbApp.cs
vim DbApp.cs
chmod +755 DbApp.cs
----------------------------------------------------------------------------------------------
using System;
using System.Data.Common;
using System.Data.SqlClient;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
           String sqlConnStr="Data Source=myServer,3433;User ID=zhangshan;Password=123;Initial Catalog=master";
        String sqlStr="select spid,waittype  from sys.sysprocesses";

        SqlConnection sqlConn= new SqlConnection(sqlConnStr);
        SqlCommand sqlCmd = new SqlCommand(sqlStr,sqlConn);
        try
        {
            string spid=String.Empty;
            string program_name=String.Empty;

            sqlConn.Open();
            SqlDataReader reader = sqlCmd.ExecuteReader();
            while(reader.Read())
            {
                spid=reader[0].ToString();
                program_name=reader[1].ToString();
                Console.WriteLine("spid="+spid+" "+"waittype="+program_name);
            }
            //Console.WriteLine("The server is:"+svrName);
        }
        catch(SqlException e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            sqlConn.Close();
        }
        //Console.Read();
        }
    }
}

3. 创建配置文件

默认情况下,system.data.*包是不存在的(.Nuget/package),因此需要添加包的依赖
"System.Data.Common": "4.1.0",
"System.Data.SqlClient" : "4.1.0",
"System.Runtime": "4.1.0"

touch project.json
vim project.json
----------------------------------------------------------------------------------------------
{
    "version": "1.0.0-*",
    "buildOptions": {
        "debugType": "portable",
        "emitEntryPoint": true
    },
    "dependencies": {
        "System.Data.Common": "4.1.0",
        "System.Data.SqlClient" :  "4.1.0",
        "System.Runtime": "4.1.0"
    },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.1"
        }
      },
      "imports": "dnxcore50"
    }
  }
}

4. 还原整个项目的依赖库

找当前目录下的项目文件(project.json),然后利用NuGet库还原整个项目的依赖库,然后遍历每个目录,生成项目文件,继续还原该项目文件中的依赖项。

dotnet restore

5. 编译应用程序

dotnet build

6. 运行运用程序

dotnet run

OK,第一个简单的数据库程序就完成了。熟悉C#的同学开发起来非常简单!

时间: 2024-11-01 03:02:28

SQLServer · 最佳实践 · 开发基于.NET CORE的LINUX版本的数据库应用的相关文章

SQLServer · 最佳实践 · SQL Server优化案例分享

title: SQLServer · 最佳实践 · SQL Server优化案例分享 author: 石沫 前端时间的视频分享,这里有同学文档总结下来: 请参考:https://yq.aliyun.com/articles/60119

SQLServer · 最佳实践 · 如何将SQL Server 2012降级到2008 R2

title: SQLServer · 最佳实践 · 如何将SQL Server 2012降级到2008 R2 author: 石沫 迁移须知 使用SQLSERVER 2012的特性在SQL 2008 R2不支持,比如新的分页方式 此迁移操作手册适用于MSSQL2012到MSSQL2008R2的迁移 迁移使用微软提供的脚本生成和导入导出工具 需要在本地将MSSQL2012迁移完成,并且应用改造完成测试通过方可上RDS 迁移到MSSQL2008R2 RDS通过备份还原的方式进行 迁移步骤 安装200

SQLServer · 最佳实践 · 透明数据加密TDE在SQLServer的应用

title: SQLServer · 最佳实践 · 透明数据加密TDE在SQLServer的应用 author: 石沫 背景 作为云计算的服务提供者,我们在向用户提供优秀的服务能力时会遇到一个合规的问题.在数据库领域,数据是极其敏感和珍贵的,保护好数据,就如保护好企业的生命线.因此,需要采取一些预防措施来帮助保护数据库的安全,如设计一个安全系统.加密机密资产以及在数据库服务器的周围构建防火墙.但是,如果遇到物理介质被盗的情况,恶意破坏方只需还原或附加数据库即可浏览数据,或者遭遇拖库情况.一种解决

SQLServer · 最佳实践 · SQL Server 2012 使用OFFSET分页遇到的问题

title: SQLServer · 最佳实践 · SQL Server 2012 使用OFFSET分页遇到的问题 author: 石沫 1. 背景 最近有一个客户遇到一个奇怪的问题,以前使用ROW_NUMBER来分页结果是正确的,但是替换为SQL SERVER 2012的OFFSET...FETCH NEXT来分页出现了问题,因此,这里简单分析一下原因,更深层次的原因还没有确切的结论,但可以提供解决办法. 在升级数据库后并且应用新功能时,这个问题可能会困扰一些同学. 2. 现象 为了复现在这个

SQLServer · 最佳实践 · RDS for SQL Server 2012 权限限制的提升与改善

title: SQLServer · 最佳实践 · RDS for SQL Server 2012 权限限制的提升与改善 author: 石沫 背景 SQL Server 作为一种强大的关系型数据库,能够提供所有场景的应用.在绝大多数云计算公司中,都提供了SQL Server作为服务的云数据库服务,譬如阿里云.但既然是服务,那么服务就需要可管理,可控制,因此,在云计算初期,都对云数据库服务进行了严格的权限控制,好处就是可控可管理,但给用户会带来一些限制,某些限制实际上是可以再细粒度管控.因此,今

SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式

背景 很多用户在使用阿里云云数据库SQL Server时,为了加快插入速度,都尝试使用大容量插入的方式,大家都知道,对于完整恢复模式下的数据库,大容量导入执行的所有行插入操作都会完整地记录在事务日志中.如果使用完整恢复模式,大型数据导入会导致填充事务日志的速度很快.相反,对于简单恢复模式或大容量日志恢复模式,大容量导入操作的按最小方式记录日志减少了大容量导入操作填满日志空间的可能性.另外,按最小方式记录日志的效率也比按完整方式记录日志高 . 但实际上,当大容量导入与数据库镜像共存时,会出现镜像

Docker在云平台上的最佳实践:基于容器技术的DevOps探索

12月9日,在云栖计算之旅线下沙龙上,阿里云容器服务团队的高级研发工程师秦妤嘉分享了<基于容器技术的DevOps探索>.首先介绍了DevOps和CD,接着分析了Docker如何打破传统CD壁垒,最后讲解了怎样从零开始搭建一个持续交付系统. 视频回顾 DevOps与Continuous Delivery DevOps 在一个较成熟的软件和服务交付的团队里,就技术层面来说主要分为三个组成部分:开发.测试和运维.开发测试团队比较关注的是代码能否运行,而运维比较关注的是系统能否在上线后稳定运行,于是隔

SQLServer · 最佳实践 · TEMPDB的设计

认识TEMPDB TEMPDB和其他数据库一样以MODEL库为模板创建,是一个全局资源,可供所有连接到实例的用户使用,不同的是它在每次SQL Server启动的时候都会被重新创建,它主要存储三种对象: 用户对象:包括用户显示创建的本地/全局临时表.表变量.表值函数.游标.临时存储过程等 内部对象:tempdb中具体的内部对象一般是不可见的,因为它们的meta信息只存于内存中并没有harden,所以系统视图也查询不到,大体分为work table.work file.sort units三类 版本

SQLServer · 最佳实践 · 透明数据加密在SQLServer的应用

背景 作为云计算的服务提供者,我们在向用户提供优秀的服务能力时会遇到一个合规的问题.在数据库领域,数据是极其敏感和珍贵的,保护好数据,就如保护好企业的生命线.因此,需要采取一些预防措施来帮助保护数据库的安全,如设计一个安全系统.加密机密资产以及在数据库服务器的周围构建防火墙.但是,如果遇到物理介质被盗的情况,恶意破坏方只需还原或附加数据库即可浏览数据,或者遭遇拖库情况.一种解决方案是加密数据库中的敏感数据,并通过证书保护用于加密数据的密钥.这可以防止任何没有密钥的人使用这些数据,但这种保护必须事