图解Ado.net连接数据库并存取数据的几种方式

代码连接 SQL Server 2017 SQL Server 2017 基本操作 阅读详情

首先上两个通用的图:

 

上面这两个图都是描述Ado.net的工作原理的。

应用程序读取数据共有三种方式:

(1)直接通过Command对象读取(但一次只能对一条数据,即表的一行),读完后不断开连接。

(2)通过DataReader对象读取(类似单向管道似的,一条一条的读数据),读完后不断开连接。

(3)通过DataAdapter一次读一堆数据(这个堆就是DataSet),读完后就断开数据库连接了。

 

应用程序更新和插入数据共有两种方式:

由于DataReader是单向的,所有不能用于插入和更新数据,只能从数据库读取数据,所以应用程序更新和插入数据只有上面的(1)和(3)两者方式。

 

从Ado.net的工作原理图可以看出,不管用哪种方式和数据库打交道,都必须有三个的东西:Connection,Command和Sql语句。

第(1)种方式如下图:

图中把工厂比喻成数据库,把商城仓库比喻成应用程序所在内存,把Command比喻成取货员“二愣子”(因为他比较笨),把Sql语句比喻成订单,把桥比喻成数据库连接对象。

第(1)方式的工作过程就是,首先要j架设好桥,然后二愣子拿到订单(Sql语句)后,就往工厂跑,把订单给工厂管理员,取回订单所需的货物(数据)后,再折返回来把货物放入仓库(内存)。但是由于一个人的力量有限,二愣子来回跑的过程中,一个来回只能搬回一件货物。这时候连接不能断(桥不能拆),因为每次需要取一件货物的时候,二愣子都需要来回跑。

方式(1)的总体印象就是,“二愣子”不断的来回跑。

 

第(2)种方式的工作过程就是,架设好桥后,二愣子拿着“订单”往工厂跑,但这次的订单比较复杂,他相当于一份合同,要求和工厂建立一个管道,仓库需要什么货物,直接操作管道的一头的控制按钮,则管道另一头会自动提取需要的货物并通过管道输送到仓库。这样“二愣子”就只需要跑一趟就行了(这份工作轻松、高兴!)。这时候连接也不能断(管道不能断),只有保持连接才能不断的一件件从工厂取货物并通过管道输送到仓库。

方式(2)的总体印象就是,有一天单向管道。

如下图:

 

第(3)种方式的工作过程就是,架设好桥后,二愣子拿着“订单”开着车往工厂跑,但这次订单要求的货物比较多,工厂就把这一堆货物帮二愣子装上车,二愣子高高兴兴的开着车兜着风把这一堆货物运回去。这次二愣子不仅能兜风,而且也只跑一趟(这份工作真拉风!)。车开回来后就可以断开连接了(完全可以把桥拆了),因为需要的所有货物都已经通过货车运回来了。此时,货车就比喻为DataAdapter对象,DataSet对象就比喻成货车拉回来的那“一堆货物的集合”。

方式(3)的总体印象就是,“二愣子”开着货车。

见下图:

 另外,网上有一个更好看点的图(意义和上图一样),如下:

 

总结:从上面的图可以看出,无论用什么方式取货物都必须有三个东西参与才能完成:桥,二愣子,订单。即:Connection,Command和Sql语句。实际上在使用DataAdapter的时候可能看不到Command对象,其实DataAdapter也是必须通过Command对象取货物的,只不过DataAdapter内部自己有Command对象而已,DataAdapter使用自己内部的Command对象(这点从最上面的Ado.net原理图可以看出)。

取货物就是从数据库中取数据,更新和插入数据到数据库的过程和取数据一样,也需要Connection,Command和Sql语句这三个东西,此不赘述。

 

具体代码如下:

假设配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="Northwind"
         providerName ="System.Data.SqlClient"
         connectionString ="server=(local); integrated security = SSPI;
         database = Northwind" />
  </connectionStrings>
</configuration>

 

(1)直接通过Command对象读取(但一次只能对一条数据,即表的一行),读完后不断开连接。

第一步:建立Connection对象(桥)

string connectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString(); //从配置文件中取出连接字符串

SqlConnection conn = new SqlConnection(connectionString);        conn.Open();  //打开连接

第二步:建立SQL语句(订单)

string sqlStr=“ Select * from Student where ID='10' ”;

第三步:建立Command对象(二愣子),用这个对象直接返回一个行数据。

SQLCommand cmd=new SQLCommand(sqlStr,conn); //参数就是sql语句和连接对象

//注意通过new Command对象的连个参数把这三个必须的东西联系在一起了。

下面就是执行Command对象的方法了,共有三种方法:

int  LineCount=cmd.ExecuteNonQuery();  //一般用于更新和插入语句,不返回查询结果,但这个函数的返回值本身返回影响的行数。

DataReader  dr=cmd.ExecuteReader(); //一般用于Select语句返回查询的数据,然后通过DataReader一个个的读取。【建立管道】

int  OneValue=cmd.ExecuteScaler(); //一般用于Select查询,但返回结果为一个值的情况,比如SQL语法中的Count函数和Sum函数。这也印证了二愣子力量有限,仅凭自己的力量一次只能搬回一件货物,或者不搬回货物,仅通知数据库更新和插入一个数据。

总之,更新和插入用ExecuteNonQuery,查询主要使用ExecuteReader,特殊情况(只返回单个值)才用ExecuteScaler。

当然,直接用Command对象读取数据就只有ExecuteNonQuery和ExecuteScaler两种方法,建立管道方法属于下面(2)的方法。

最后别忘了关闭连接,conn.Close();

 

(2)通过DataReader对象读取(类似单向管道似的,一条一条的读数据),读完后不断开连接。

第一步:建立Connection对象(桥)      

string myconn="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind";

SqlConnection conn=new SqlConnection(myconn);        

第二步:建立SQL语句(订单)

string mysql="select OrderID,CustomerID from Orders where CustomerID='CHOPS'";

第三步:建立Command对象(二愣子),但用这个对象返回一个管道DataReader  

SqlCommand cmd=new(mysql,conn);       conn.Open();  //打开数据库连接,用之前打开就行,放在哪无所谓
 //通过SqlCommand的ExecuteReader()方法构造DataReader 对象。
SqlDataReader myreader=cmd.ExecuteReader();
while(myreader.read()){
  Console.WriteLine(myreader.GetInt32(0)+","+myreader.GetString(1));

}
myreader.Close();
myconnection.Close();

补充:SqlDataReader读数据方法有两大类,带小括号的函数和带中括号的索引属性

带小括号的有,GetInt32(), GetString()等,参数都是int类型,表示列号,也只能使用列号。

带中括号的有,直接带上中括号,有myreader[0] 和 myreader["ID"]两种,即可以使用列号,也可以使用列名。

 

(3)通过DataAdapter一次读一堆数据(这个堆就是DataSet),读完后就断开数据库连接了。

第一步:建立Connection对象(桥)

string connectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString(); //从配置文件中取出连接字符串

SqlConnection conn = new SqlConnection(connectionString);        conn.Open();  //打开连接

第二步:建立SQL语句(订单)

string sqlStr=“ Select * from Student where ID='10' ”;

第三步:建立DataAdapter对象(这个对象内部隐式的建立了Command对象),即建立好货车就行了,货车内部有人。但通过这个对象填充DataSet,DataSet在本地内存中

SqlDataAdapter da=new SqlDataAdapter(sqlStr,conn);  //参数仍然是sql语句和连接对象

DataSet ds=new DataSet();

ds.Fill(ds,"表名");

 

使用参数的Sql语句,即使用Paramerter对象例子如下:

这里使用SqlParamerter对象,这个对象是SqlParamerters集合的子元素,每个Command对象都有一个Parameters属性。【就好像二愣子不仅拿着订单,还拿着订单中每样货物对应的更详细的货物描述的表单。】

下面代码目的是根据已知的名字和密码获取年龄大小。

string name = "Tim";

string pwd ="123456";

string Age;

string constr = @"server=.\sqlexpress;database=MyDataBase;uid=sa;pwd=sa";

using (SqlConnection sqlconn = new SqlConnection(constr))  //第一步,建立连接对象

{

         //参数化查询1

        string cmdstr = @"select age from loginn where uname=@name1 and upwd=@pwd1"; 

        //第二步,建立Sql语句。 @name1,@pwd1仅仅是别名而已,相当于局部变量

        using (SqlCommand cmd =new SqlCommand(cmdstr, sqlconn))   //第三步,建立Command对象

                {

                        //加参数

                       cmd.Parameters.Add(new SqlParameter("@name1", name));

                        //把name中的值赋给@name

                       cmd.Parameters.Add(new SqlParameter("@pwd1", pwd));//注意Add方法中是new了一个 SqlParameter

                       // cmd.Parameters.AddWithValue("@pwd1", pwd);//此方法内部实现同Add,推荐用前者

                       if (sqlconn.State == ConnectionState.Closed)

                               {

                                        sqlconn.Open();

                                        Age=cmd.ExecuteScalar();    //获取年龄

                                       //由于是查询且age字段是int类型,且Sql语句返回一个单值,所以用ExecuteScalar最方便。 否则就需要用ExecuteReader。       

                                }  //end if           

                  }  //end using

}  //end using

 

 

使用存储过程的例子如下:

转自:http://www.cnblogs.com/herbert/archive/2010/07/12/1775889.html

ADO.NET中调用存储过程

此时,存储过程就看成一种特色类型的订单,也就是通知二愣子手里拿的订单是个“存储过程”类型的订单,另外这种订单也需要“更详细的货物描述的表单”,所以也需要参数,其他的就和普通带参数的订单的执行过程一模一样了,需要注意的是一般使用Command对象的ExecuteNonQuery方法执行存储过程。

下面这个例子展示如何在ADO.NET调用存储过程。我只选择了一种方式,说实话不太喜欢多样化的方式去处理问题,这种发散式的做法在编程中似乎没有必要。选择自己喜欢的一种方式。

这里SQL Server有一个样本数据库Northwind.

以Northwind里的Region表为例:

Region表有2个字段:

  • RegionID, int 主键
  • RegionDescription, nchar(50)

写以下几个存储过程:

RegionUpdate: 多个参数

CREATE PROCEDURE RegionUpdate(@RegionID INTEGER, @RegionDescription NCHAR(50))
AS
SET NOCOUNT OFF
UPDATE Region
SET RegionDescription = @RegionDescription
WHERE RegionID = @RegionID
GO

RegionDelete 一个参数

CREATE PROCEDURE RegionUpdate(@RegionID INTEGER)
AS
SET NOCOUNT OFF
DELETE FROM Region
WHERE RegionID = @RegionID
GO

RegionInsert 带返回参数

CREATE PROCEDURE RegionInsert(@RegionDescription NCHAR(50), @RegionID INTEGER OUTPUT)
AS
SET NOCOUNT OFF
SELECT @RegionID = MAX(RegionID) + 1 
FROM Region
INSERT INTO Region VALUES(@RegionID, @RegionDescription)
GO

 

工程添加下面的配置文件

App.confi

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="Northwind"
         providerName ="System.Data.SqlClient"
         connectionString ="server=(local); integrated security = SSPI;
         database = Northwind" />
  </connectionStrings>
</configuration>

关于连接字符串怎么写参考:

http://www.connectionstrings.com

下面是C# code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;


namespace SQLProcedureDemo
{
    class Program
    {
        private static string GetConnectionStringsConfig(string connectionName)
        {
            string connectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString();
            Console.WriteLine(connectionString);
            return connectionString;
        }


        static void Main(string[] args)
        {
            string source = GetConnectionStringsConfig("Northwind");

            try
            {
                using (SqlConnection conn = new SqlConnection(source))
                {
                    conn.Open();

                    // Invoke RegionUpdate Procedure
                    SqlCommand cmd = new SqlCommand("RegionUpdate", conn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter updatepara1 = new SqlParameter("@RegionID", SqlDbType.Int);
                    updatepara1.Value = 3;
                    cmd.Parameters.Add(updatepara1);
                    SqlParameter updatepara2 = new SqlParameter("@RegionDescription", SqlDbType.NChar);
                    updatepara2.Value = "Northern";
                    cmd.Parameters.Add(updatepara2);

                    // You can also use the following statement
                    //cmd.Parameters.AddWithValue("@RegionID", 3);
                    //cmd.Parameters.AddWithValue("@RegionDescription", "Northern");

                    cmd.ExecuteNonQuery();

                    // Invoke RegionDelete Procedure                    
                    SqlCommand cmdDel = new SqlCommand("RegionDelete", conn);
                    cmdDel.CommandType = CommandType.StoredProcedure;
                    SqlParameter myParameter = new SqlParameter("@RegionID", SqlDbType.Int);
                    myParameter.Value =5;
                    cmdDel.Parameters.Add(myParameter);
                    cmdDel.ExecuteNonQuery();
                    

                    // Invoke RegionInsert Procedure
                    SqlCommand cmdInsert = new SqlCommand("RegionInsert", conn);
                    cmdInsert.CommandType = CommandType.StoredProcedure;
                    
                    SqlParameter para1 = new SqlParameter("@RegionDescription", SqlDbType.NChar);
                    para1.Value = "South West";
                    cmdInsert.Parameters.Add(para1);

                    SqlParameter para2 = new SqlParameter("@RegionID", SqlDbType.Int);
                    para2.Direction = ParameterDirection.Output;
                    cmdInsert.Parameters.Add(para2);

                    cmdInsert.ExecuteNonQuery();

                    int newRegionID = (int)cmdInsert.Parameters["@RegionID"].Value;
                    Console.WriteLine(newRegionID);                    
                    conn.Close();
                }
            }
            catch (SqlException ex)
            {
                //

                Console.WriteLine(ex.Message);
 
            }

            Console.ReadKey();
        }
    }
}

 

ADO.net工作原理教程 ADO.Net的工作原理,以及详细的源码程序 立即下载

相关推荐

Blender----利用DEM(tif)生成三维模型

利用DEM(tif)生成三维模型

LongJ_Sir的博客 5423

ADO.NET处理数据的保存(序列化和反序列化,XML文件)

数据的保存技术 使用文档进行数据保存 问题 当对象属性发生变化时,需要增加或减少信息的写入和读取次数 信息的安全性较差 序列化和反序列化 注意: 只要是对象皆可进行序列化和反序列化操作 如果某个数据对象要进行序列化和反序列化操作,首先要将这个对象进行添加特性-序列化标识 对象数据进行序列化保存 private void btnSavesl_Click(object sen...

dust__的博客 931

Simulink中通过MEX与MinGW实现C/C++结构体变量的高效导入

本文详细介绍了在Simulink中通过MEX工具链与MinGW编译器,高效导入C/C++结构体变量的完整流程。文章从需求背景出发,逐步讲解了MinGW环境配置、.h文件编写规范、核心导入命令Simulink.importExternalCTypes的使用,以及如何在MATLAB Function模块和总线创建器中调用自定义结构体,旨在实现模型与代码的无缝对齐,为后续仿真和代码生成奠定坚实基础。

weixin_29056781的博客 343

C# ADO.NET数据库操作

C# ADO.NET数据库操作 C# ADO.NET数据库操作及常用类概述 C# Connection:连接数据库 C# Command:操作数据库 C# DataReader:读取查询结果 C# DataSet和DataTable:将查询结果保存到DataSet或DataTable中 C# DataRow和DataColumn:更新数据表 C# DataSet:更新数据库 C# ComboBox:组合框控件数据绑定 C# DataGridView:数据表格控件数据绑定 C# 数据表

qq_38599908的博客 4000

Appsflyer S2S事件上报实战:从参数获取到避坑指南(附Firebase对比)

本文详细解析了Appsflyer S2S事件上报的实战技巧,包括核心参数获取、测试环境搭建、生产环境最佳实践以及高级场景处理。通过对比Firebase的事件上报机制,帮助开发者高效避坑并优化数据上报流程,提升应用分析与营销效果。

egg99的博客 885

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)

本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。

weixin_42549451的博客 674

利用ADO.NET将XML转换成数据库表

1 DataSet ds = new DataSet(); 2 ds.ReadXml(@"users.xml"); 3 4 DataTable dt = ds.Tables[0]; 5 6 if (dt.Rows.Count > 0) 7 { 8 ...

weixin_30632883的博客 169

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 283

如何用ADO.Net操作XML (转载)

已知有一个XML文件(bookstore.xml)如下:      Oberons Legacy    Corets, Eva    5.95   1、往节点中插入一个节点:   XmlDocument xmlDoc=new XmlDocument();   xmlDoc.Load("bookstore.xml");   XmlNode root=xmlDoc.SelectSingleNode(

soft_biao的专栏 1099

uniapp - H5人脸识别认证与活体检测功能(纯前端免费方案+微信sdk人脸识别)完整源码,微信公众号网页/h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp源码

uniapp实现人脸认证,uniAPP h5手机拍照+人脸识别,免费人脸识别插件,前端人脸识别解决方案,uniapp H5人脸识别带前后摄像头,人脸识别在H5页面进行采集,微信公众号H5人脸核身,H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,uniapp人脸监测,uniapp人脸生物监测,使用uniapp开发H5人脸采集功能/人脸识别功能,uniapp项目—h5端人脸采集功能实现,uniapp vue3人脸核身,H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信

🏆 前端领域优质创作者 3809

解读 2025《高质量数据集 质量评测规范》

《高质量数据集质量评测规范》为2025年数据质量评估提供标准化框架,适用于政府部门、AI企业、数据服务商等行业主体。规范以"说明文档-数据质量-模型应用"三维体系为核心:明确定义高质量数据集分类,细化各项指标要求(包括文档完整性、数据规范性、应用多样性等),并提供具体评分细则(百分制,90分达标)和计算方法。附录补充多模态数据处理细则,旨在建立可操作的质量评估标准,保障优质数据供给流通。

cdfunlove的博客 1887

c#操作XML数据

<br />1 基本思路 <br />其实用DataSet操作XML,归根到底就是对DataSet里的表格,行,列等进行操作,然后用DataSet里的东西重新写到XML中,从而实现编辑XML的目的。如果再配合上.xsd文件的话,那效果更佳。 <br /><br />  2 程序详解 <br />(1) XML文件内容 <br />本类操作的XML和生成的XML格式是一样的,如下: <br /><br /><br />http://tempuri.org/xml_xmlDB.xsd"> <br /><br /

Johnzheng2011的专栏 1008

2024年09月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析

小杨购物 【题目描述】 小杨有n元钱用于购物。商品A的单价是a元,商品B的单价是b元。 小杨想购买相同数量的商品A和商品B。 默认小猫角色和白色背景,编写程序请你帮小杨计算出他最多能够购买多少个商品A和商品B。 【输入描述】 新建变量“n”用于存储小杨购物的金额。 新建变量“a”用于存储商品A的价格。 新建变量“b”用于存储商品B的价格。 1≤n,a,b≤100000 如下图所示: 图片 【输出描述】 新建变量“result”用于存储小杨最多购买商品A和商品B的个数。 如下图所示:

人生就是一个不断学习的过程 496

ADO.NET结构图解

ADO.NET还是比较常用的,于是我研究了一下ADO.NET结构,在这里拿出来和大家分享一下,希望对大家有用。ADO.NET结构包括两个核心组件:DataSet和.NET Framework数据提供程序DataSet是ADO.NET的断开式结构的核心组件,为了实现独立于任何数据源的数据访问,可将其视为从数据库检索出的数据在内存中的缓存。它包括一个或者多个DataTable对象的集合,这些对象由数据

darkread的专栏 1538

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

亮剑.NET. 图解C#开发实战 在线阅读

http://book.51cto.com/art/200906/131503.htm 亮剑.NET. 图解C#开发实战    李新峰 付志涛 缪勇本书采用全新的图解思路,分3篇介绍使用微软C#语言开发实际应用程序的基本知识。第1篇包括10章,介绍了C#语言的基础知识,主要讲解C#的框架结构、使用方法、基础语法和基本开发过程;第2篇包括7章,介绍了7种通用实例的开发过程

Leo 2343

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ADO.NET Entity Framework 学习(1)

ADO.NET Entity Framework出来已经有一段时间了,本人也是刚刚开始学习这个架构。vs2008 sp1发布后,ADO.NET Entity Framework已经直接和NET3.5SP1集成了。自己也是边学习边总结,刚接触新的技术要慢慢来啊!!!下面就是先了解一下怎么建一个 Entity 图解,如下:1 :添加EDM文件以上

bzhyan的专栏 859

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

图解ado.net数据库连接池

ikmb的专栏 854

【原】图解ADO.Net

粉稀饭的几张图,清晰的说明了ADO.Net,有图有真相,图片就是适合理解。 1)来自微软的官方文档,说明了ADO.Net的体系结构 2)来自动软代码生成器的作者李天平老师,通过生活中的浇水灌溉的例子,生动的映射了ADO.Net体系对象 3)来自网络上,描述了ADO.Net对象的使用 4)同样来自网络上,描述了ADO.Net对象的使用 转载于:https://www.cnbl...

weixin_33777877的博客 107

ADO.NET图解

转载于:https://www.cnblogs.com/yrfcxy/p/11078505.html

weixin_30633507的博客 98

Programmatically using ADO.NET and XML

   用ADO.NET,我们可以将数据库作为一个虚拟的XML文档使用。XPath查询,Xslt传送格式都可以很自然的被使用。  介绍: ADO.NET已经被作为一个强大的中间件使用了。尽管是来自ADO,它已经被完全的重新开发以用来更好的支持Web 应用程序。ADO.NET的主要特点就是它的无连接的数据集,因此而命名为Dataset。ADO.NET扮演着一个富有特点的,记录在内存中的,或者叫数据缓冲的角色。换句话说,它就是一个无连接的数据服务指针。所有数据集得数据特征就是可以在Dataset中使用,譬如,排序

108

图解DotNet框架之四:System.Data

(声明:本系列只想给大家介绍.net框架,并不是语法和类的使用的讲解,所以只能概括的描述一下所提到的类,如果有疑问可以到MSDN上面去查) ADO.net类库有两种完全不同的方式来实现数据访问:连接式和断开式.ADO.NET没有提供单一的方式和不同的数据库进行通信,而是提供了多种数据提供器,这样的好处是可以将某种类型数据库的特性发挥出来.我们来看看ADO.NET...

weixin_30474613的博客 145

VS2013使用EF6通过ADO.NET 连接mySql成功步骤

VS2013使用EF6通过ADO.NET 连接mySql成功步骤 1、安装mysql-for-visualstudio-1.2.6(我用的目前最新版,这个一般安装VS2013就已经有了,没有的话下载一个安装) 2、VS2013中,在NuGget程序包管理控制台中分别输入以下命令:   1)install-package entityframework   2)install-package...

weixin_34111790的博客 189

一步步写自己SqlHelper类库(一):ADO.NET简介

巩固基础知识,一步步写自己的SqlHelper类。 这一章节先来聊聊ADO.NET简介,MSDN对这方面的介绍已经很详细了,我主要是结合它加上自己的理解,进行总结。 1.ADO.NET定义   引言:在当今数据信息丰富的时代,计算机领域中使用数据库来存储信息和访问信息,但是本身数据库种类有很多,例如SQL Server,Oracle,Access,MySql等,因此,如何能更加高效、更加方便...

weixin_30817749的博客 87

图解SSIS循环导入Excel工作表

 将一个excel文件中的所有相同结构的工作表导入到sql2005的同一张表中。下面用大量图片完全说明整个过程.1、测试环境为一张excel中的三个sheet2、打开Microsoft Visual Studio 2005或者随sql2005安装的SQL Server Business Intelligence Development Studio,新建一个商业智能项目。

jinjazz 1万+

c 窗体连接mysql_c 窗体如何连接数据库

如何使用C++ Builder 6.0连接Access数据库本文假定所需连接的Access数据库为db_restaurant,如何连接db_restaurant,现在将拉开帷幕。首先,通过使用“File→New→Data Module”创建一个用于连接数据库的窗体。然后,在“ADO”选项卡下选择“ADOConnection”控件与“ADOQuery”控件...文章狂斩一条龙2011-04-1449...

weixin_29383429的博客 746
上一篇: html所有标签
下一篇: 收藏的网页-Ogre
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值