C#中三种连接数据库,读取数据的方式
示例代码解压缩后导入解决方案:https://download.youkuaiyun.com/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 高度抽象化,只需要更改实体类中的连接信息,后期修改代价较小,兼容性更高。
但不论哪种方式都存在优势劣势,具体实践中综合使用不可偏废。