中年老同志的C#入门-2 C#连接数据库读取数据的三种方式附示例

4 篇文章 0 订阅

C#中三种连接数据库,读取数据的方式

示例代码解压缩后导入解决方案:https://download.csdn.net/download/connora/11969638

测试数据库为Work,本机安装,用户名user,密码123321

1.传统方式,入门快,功能强大,但开发者需要略懂SQL语言命令。

          主要流程就是 输入连接信息-连接-执行sql命令-获得结果。

 

using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project
{
    class Program     
    {
        static void Main()
        {//传统方式读取数据库
            //定义连接参数  
            var connection = new System.Data.SqlClient.SqlConnection(
                "Server=tcp:127.0.0.1,1433;" +
                "Database=Work;User ID=user;" +
                "Password=123321;Encrypt=False;" +
                "TrustServerCertificate=True;Connection Timeout=30;"
                );            
            //定义sql命令
            var queryString = "SELECT * FROM Test ProductID > 90 ;";
            SqlCommand command = new SqlCommand(queryString, connection);
            //连接数据库
            connection.Open();
            //执行查询语句,获得结果
            SqlDataReader reader = command.ExecuteReader();
            //输出结果
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1},{2},{3}", reader["name"], reader[1], reader[2], reader[3]));
            }
            Console.WriteLine("Connected successfully.");          
            Console.WriteLine("按任意键退出");
            Console.ReadKey(true);
        }         
    }
}

2和3两种方式都需要预先创建ADO.NET实体数据模型,使用向导创建出数据库类、表类。操作如下:

在主界面右侧解决方案名称上点右键,选择添加-新建项

继续

注意名称输入的是Work

没有连接的,点新建连接根据向导操作即可,注意此处WorkEntities

根据需要选择需要实例化的表

红线部分即为ADO.NET生成的数据类,无需修改。

2.MVC方式,1的简化版,与ThinkPHP等其他语言框架风格类似,比1简练1,代码少。

using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project
{
    class Program     
    {
        static void Main()
        {//MVC方式读取数据库
            
            //连接数据库操作被实体数据模型类的实例化给代替
            var Mt = new WorkEntities();//WorkEntities为ADO自动创建代表Word数据库的实体数据模型类

            //执行命令
            var products = Mt.Product.Where(x => x.ProductID > 90).ToList();
            
            //输出结果
            foreach (var element in products)
            {
                Console.WriteLine(element.Name);
            }

            Console.WriteLine("Connected successfully.");          
            Console.WriteLine("按任意键退出");
            Console.ReadKey(true);
        }         
    }
}

3.LINQ方式,使用LINQ语言代替SQL查询语句,面向对象,更加抽象,更加普适(XML 内存数据 MYSQL等多种数据均支持)入门门槛高,后期不确定是否提升效率。

using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project
{
    class Program     
    {
        static void Main()
        {//LINQ方式读取数据库
            
            //连接数据库操作被实体数据模型类的实例化给代替
            var Mt = new WorkEntities();//WorkEntities为ADO自动创建代表Word数据库的实体数据模型类

            //执行命令
            var products = from product in db.Product
                           where product.ProductID >= 2
                           select product;//编译器要求的语序
            
            //输出结果
            foreach (var element in products)
            {
                Console.WriteLine(element.Name);
            }

            Console.WriteLine("Connected successfully.");          
            Console.WriteLine("按任意键退出");
            Console.ReadKey(true);
        }         
    }
}

对比(初步体会,欢迎指正):

2、3方式相对于1更加先进,3比2更加抽象兼容性更高。

方式1 需要主要代码内定义连接参数,后期修改麻烦。

方式2 更适合SQL等数据库语言,如果更换了数据库,数据库查询语言有变化存在兼容性问题,后期修改代价低于方式1。

方式3 高度抽象化,只需要更改实体类中的连接信息,后期修改代价较小,兼容性更高。

但不论哪种方式都存在优势劣势,具体实践中综合使用不可偏废。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值