讲师中心 微信公众号
AI工具推荐 视频效率加速

C#怎么连接SQL数据库_C#如何实现数据持久化【案例】

阿瑶酱_6172

阿瑶酱_6172

发布时间:2026-03-20 13:30:12

|

177人浏览过

|

来源于php中文网

原创

SqlConnection连接失败主因是连接字符串错误或权限未开;需正确指定服务器实例、数据库名,启用TCP/IP和混合认证;防火墙、SQL Server Browser及端口配置须检查;务必用using块释放资源并参数化查询防注入。

c#怎么连接sql数据库_c#如何实现数据持久化【案例】

SqlConnection 连接字符串写错,连不上数据库

连不上最常见原因是连接字符串格式不对或权限没开。SQL Server 默认不启用 TCP/IP,本地用 localhost 或 . 可能失败,远程更大概率报 SqlException: A network-related or instance-specific error...。

  • 本地开发优先用 Server=(local)\SQLEXPRESS(SQL Server Express 默认实例)或 Server=localhost\MSSQLSERVER(默认命名实例)
  • 连接字符串里必须明确指定 Database=xxx,不能只写服务器名;如果库不存在,SqlConnection 不会自动创建,只会报错
  • Windows 身份验证用 Integrated Security=true;SQL 账户登录要确保 User ID=xxx;Password=yyy 且 SQL Server 已启用混合模式认证
  • 防火墙、SQL Server Browser 服务、TCP 端口(默认 1433)三个地方任一被拦,都会静默超时——建议先用 SSMS 手动连通再写代码

用 using 块释放 SqlConnection 和 SqlCommand

不显式释放连接对象会导致连接池耗尽,后续请求卡住或抛 Timeout expired. The timeout period elapsed...。C# 的 SqlConnection 实现了 IDisposable,但很多人只 Close() 不 Dispose(),或在异常分支漏掉释放。

  • 必须用 using 块包裹 SqlConnection、SqlCommand、SqlDataReader —— 它们都实现 IDisposable
  • 不要手动调用 Close() 或 Dispose(),using 会在作用域结束时强制执行,包括异常发生时
  • 连接字符串里的 Pooling=true(默认开启)意味着连接实际是复用的,但你仍得“归还”它,否则连接池认为你还占着
using (var conn = new SqlConnection(connStr))
{
    conn.Open();
    using (var cmd = new SqlCommand("SELECT COUNT(*) FROM Users", conn))
    {
        var count = (int)cmd.ExecuteScalar();
    } // cmd.Dispose() 自动触发
} // conn.Dispose() 自动触发,连接归还池中

参数化查询防 SQL 注入,别拼接字符串

用 string.Format 或 $"" 拼接 SQL 是高危操作,哪怕只处理内部数据,一旦字段含单引号或分号就崩,还可能被注入删库语句。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • SqlCommand.CommandText 里所有动态值必须走 Parameters.Add(),比如 cmd.Parameters.AddWithValue("@id", userId)
  • 避免用 AddWithValue 处理 null 或日期——它可能推断错类型导致索引失效;明确用 Add("@id", SqlDbType.Int).Value = userId
  • WHERE 条件里多个参数别写成 "WHERE Name = '" + name + "'",哪怕加了引号转义也不安全;SQL Server 对 Unicode 字符、注释符等有特殊解析逻辑

EF Core vs 原生 ADO.NET:选哪个做持久化

不是“谁更好”,而是“场景是否匹配”。EF Core 封装深,写简单 CRUD 快,但查复杂报表、调存储过程、做批量更新时容易绕弯甚至性能翻车。

  • 纯增删改查、领域模型稳定 → 用 EF Core,DbContext.SaveChanges() 自动跟踪变更
  • 需要控制 SQL、复用现有存储过程、高频大批量导入(如日志入库)→ 直接用 SqlConnection + SqlBulkCopy 或原生命令
  • EF Core 的延迟加载(Lazy Loading)默认关着,但若开了又没注意导航属性访问时机,可能触发 N+1 查询——比手写 SQL 多十几倍请求
  • EF Core 迁移(dotnet ef migrations add)生成的 SQL 不一定适合生产环境,尤其涉及索引、约束、分区表时,得人工 review

该写的都写了,但最容易被跳过的其实是连接字符串里的 Connect Timeout 和 Application Name —— 前者决定你等多久才报错,后者决定了 SQL Server Profiler 里能不能快速过滤出你的应用流量。

作者最新文章

yandex入口

2026-11-05 16:11

yandex首页

2026-11-05 16:13

Yandex.tm引擎首页

2026-11-05 16:15

Yandex.tm搜索引擎

2026-11-05 16:17

Yandex引擎首页

2026-11-05 16:19

Yandex官网网页版

2026-11-05 16:21

Yandex.tm引擎入口

2026-11-05 16:22

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1871

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5104

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1809

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

30817

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3647

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3667

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1243

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn