SQL ServerJava进击C#——语法之ADO.NET

本章简言

齐平等节说到关于C#语法的底子部分。了解相关的基本功部分后咱们就算如错过询问一下C#凡呀体统访问数库底。C#管走访数据库及时无异于有的知识点叫作ADO.NET。即凡是JAVA常常说到的JDBC这同样片的知识点了。笔者根据使用数据库方式的异而分为有线连接和无线连接(关于有线和无线的叫法是作者个人定义之。因为看了不同的书写里很多叫法)。不管是啊体统的叫法。只要掌握有线是保持连续的状态下操作数据库。而无线是连之后复制一卖副本,关闭连接,对副本进行操作后,在接连更新数据库。笔者觉得如果只是采用以来,只要了解对应之几乎单相关的类就好了。如果出做研究来说,就是对准客中间的一对机制进行攻了。那么这里仅是提到哪边行使。

 ADO.NET的概念

由于本系列并无是教学ADO.NET。所以这边笔者就见面令点定义有线连接方式有关的类似。不管怎么样吃咱先行看一下ADO.NET类相关联的所有基类吧。这规范吧便宜我们下的学。

下面是ADO.NET的基类信息

DbConnection类:用于连接数仓库的类。相当给JDBC里面通过DriverManager.getConnection方法赢得Connection接口对应的实例类。

DbCommand类:用于存放数据源执行的 SQL
语句或存储过程的类似。相当JDBC里面的Statement接口。

DbDataReader类:从数额源读取行的一个单进流。即凡执行SQL结果的存放地方。相当给JDBC里面的ResultSet接口

DbParameter类:用于表示DbCommand里面对应之参数。相当给JDBC里面的PreparedStatement的填参数一样子。

DbParameterCollection类:不用看即清楚DbParameter类的集合类。

DbTransaction类:用于工作之类似。相当给JDBC里面的conn.setAutoCommit(false)的效果。这个不会见无了解吧。

DbDataAdapter类:这个类常用于DataSet一引用。也就是说他是作者上面定义之无线连接方式。

DbCommandBuilder类:用于协调 DataSet
的改动和关系数据库的单表命令。即凡是同方的DbDataAdapter类常常同用。

DbConnectionStringBuilder类:用于转移连接字符串。

实质上ADO.NET所有的好像都是基于上面的基类。想只要以ADO.NET的口舌,只要了解上面的基类就可了。如果又尖锐的话,笔者也无理解什么开了。至于上面的基类C#管他们按类层次划分也连接类和非连接类。如下面笔者在网达到找到的同等张图纸。我们就算好好懂的明亮啊部分凡是并接类,哪有长短连类。

SQL Server 1

强烈连接就是接二连三数库时用的切近,非连接就是于无数据库的状况相关类了。而者笔者是基于操作数据库模式进行私分的。希望不用误导各位的知晓。上面左边的正方内就属于连接类,右边的四方是属非连接类。

连接类:DbConnection类、DbCommand类、DbTransaction类、DbParameter类、DbDataAdapter类

非连接类:DataTable类、DataRow类、DataRowCollection类、DataColumn类、DataColumnCollection类、DataRelation类、DataRelationCollection类

上ADO.NET,事实上便是学习ADO.NET对应的切近。有矣咱对达成面类的终将的刺探后。笔者只要自己下手写一个小例子就是足以了解与喻了。

ADO.NET的例子

作者的数据库用是SQL Server
2008。新建一个数据库,笔者将他命名也Ado。在新建一个张表为Catalogs。如下SQL语句

表的SQL:

CREATE TABLE [dbo].[Catalogs](
    [ID] [int] NOT NULL,
    [CatalogName] [nvarchar](50) NULL,
    [CatalogCode] [nvarchar](50) NULL,
 CONSTRAINT [PK_Catalogs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

数据的SQL:

INSERT [Catalogs] ([ID], [CatalogName], [CatalogCode]) VALUES (1, N'图书', N'c0001')
INSERT [Catalogs] ([ID], [CatalogName], [CatalogCode]) VALUES (2, N'计算机', N'c0002')

好了。有了上面的数量和表之后,笔者就如简明做一个博数据的例证来读ADO.NET的学问。

平、首先我们只要想办法以及数据库来涉及。即凡是连接受数据库。本着JDBC来发话第一步是加载对许数据库让。相信下面就段代码做JAVA不容许未明白吧。可惜C#眼看边也仿佛没有当即同样步。JDBC做了立同一步后才开得到对应之连接类实例。

JDBC的加载驱动:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

JDBC的得连续:

String url = "jdbc:sqlserver://localhost;databaseName=AAA";
Connection conn = DriverManager.getConnection(url,"sa","123");

关于ADO.NET却尚未那复杂。直接实例化一个数据库连接类就执行了。如下的代码

ADO.NET的博连续:

SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=Ado;User ID=sa;Password=123");

此笔者说一个有些伎俩。相信JDBC在博连续字符串的时段,是一模一样起十分讨厌的事务。只能百度或死记。而C#眼看边设就此底是SQL
Server
的语句。到是可为此VS的“服务器资源管理器”视图来收获相应的接连字符串。

SQL Server 2

右击图上之“数据连接”》添加连接(A)

SQL Server 3

本条时段即便弹出一个被你挑选而连续的数据库信息。如图下。

SQL Server 4

优先以劳务器名的四方中填入”.”。然后于增选以WINDOW 或是 SQL
SERVER。最后你就算好在“选择还是输入数据库名称”中下拉选择而所对应的数据库了。这个上点击确定以掉就会在“服务器资源管理器”视图中“数据连接”下方多生一个连接。先择右击》属性

SQL Server 5

点击“属性(R)”之后便见面弹有相应的习性窗体了。这才是咱们最后要的消息了。如图下。看到连接字符串了没。就是他了。复制一下虽好了。只是密码部分修改一下即使可了。因为他是******。这是怪的。

SQL Server 6

连日字符串对应之价值:

Data Source=.;Initial Catalog=Ado;User ID=sa;Password=***********

SqlConnection类就是DbConnection类的子类。有胸的读者也许看到有些题材来。是勿是认证一些:每一个见仁见智之数据库是免是对应之在Connection前面加上对应的机要字母呢?即凡XxxConnection。Xxx可能会见转换。没有错。笔者想说一样触及便是者。在JDBC里面不同的数据库会加载不同之让。如MySql就加载MySql的叫。Sql
Sever就是加载Sql
Sever的教。只是C#当时边没有对应的加载驱动的传道。事实上笔者觉得有。只是变了使以。XxxConnection的Xxx便是极其好之体现。

亚、新建一个SQL命令。即凡是新建一个DbCommand类对应的实例类。本条片段相当JDBC的Statement
stmt = conn.createStatement()了。

C#:

SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "SELECT TOP 1000 [ID] ,[CatalogName] ,[CatalogCode] FROM [Ado].[dbo].[Catalogs]";
command.CommandType = System.Data.CommandType.Text;

SqlCommand类是DbCommand类的子类。这个笔者说了是白说。上面我们懂得了DbCommand类的成效。SqlCommand类理解为用于存放SQL命令。同时用于触发SQL命令的实施。首先让咱们看一下端的代码。其中Connection属性和CommandText属性相信大家都晓得。如果只是存放SQL命令却休叫他对应之连接,他同时什么知道失去哪里查数据库也?所以来Connection属性就理解失去搜寻哪个数据库了,有CommandText属性就是知情要对准是数据库做呀。而CommandType属性是意味着如做的SQL命令是什么种的。只是SQL语句,还是存储过程,或是只直获得表。(这里的变量connection是达到面代的connection一样子)

C#:

 1 // 摘要: 
 2     //     指定如何解释命令字符串。
 3     public enum CommandType
 4     {
 5         // 摘要: 
 6         //     SQL 文本命令。(默认。)
 7         Text = 1,
 8         //
 9         // 摘要: 
10         //     存储过程的名称。
11         StoredProcedure = 4,
12         //
13         // 摘要: 
14         //     表的名称。
15         TableDirect = 512,
16     }

兹SqlCommand类对象实例知道了连年的数据库,也了解如果实行SQL命令。接下来就是变化对应的结果。即是履行。那么在执行之上,又见面分开了询问与增删改。这或多或少JDBC也发出。Statement接口的executeQuery方法及executeUpdate方法就是极好之证实了。不用笔者多说了。同样子,C#啊一致,只是方式名不一样子而为。ExecuteReader方法就是一定于executeQuery方法。但记得ExecuteReader方法这边一般是不用参数的。ExecuteNonQuery方法相当于executeUpdate方法。理解了当下俩只法子就好惩治了。在履行及时俩个点子之前,我们还有做相同起事情就是是开辟连接。代码如下

C#:

connection.Open();//打开连接
SqlDataReader dr = command.ExecuteReader();//执行SQL命令

其三、处理SQL命令的结果。即凡是用SqlDataReader类来博对应之结果。JDBC中以得到结果的时节,就是用ResultSet接口。显然俩者很接近。

C#:

SqlDataReader dr = command.ExecuteReader();//执行SQL命令
while (dr.Read())
{
      Console.WriteLine(string.Format("CatalogName:{0}  CatalogCode:{1}", dr[0], dr["CatalogCode"]));
}

dr.Close();
connection.Close();

跟JDBC真的那个相近,其中dr.Read()就跟ResultSet接口的next()方法类似。而dr[0]和dr[“CatalogCode”]跟ResultSet接口的getString()方法类似。注意在实施完毕以后如果关门SqlDataReader类和SqlConnection类。让咱看一下履行的结果吧。

SQL Server 7

上面笔者只开询问的事例也尚未做增删改的例证。因为作者相信对你们来是小事了。只要将SQL命令修改成增删改之口舌和ExecuteReader方法变成为ExecuteNonQuery方法。当然这就没有回SqlDataReader类的目标了。有的只是影响的行数而因为。代码如下

C#:

SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=Ado;User ID=sa;Password=123");
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "UPDATE Catalogs SET CatalogName='小吃' WHERE ID =1";
command.CommandType = System.Data.CommandType.Text;
connection.Open();//打开连接

int affectCount = command.ExecuteNonQuery();
if (affectCount > 0)
{
      Console.WriteLine("修改成功");
}
else
{
      Console.WriteLine("修改失败");
}

connection.Close();

面是略的改动。只要读者们融洽组装SQL语句就足以了。那么闹没有产生跟JDBC的PreparedStatement接口功能一样子的法也。答案是有。笔者就直接把代码贴出。你们看一下即便清楚啊用了。

C#:

SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=Ado;User ID=sa;Password=123");
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "UPDATE Catalogs SET CatalogName=@CatalogName WHERE ID =@ID";
command.CommandType = System.Data.CommandType.Text;
connection.Open();//打开连接
command.Parameters.Add(new SqlParameter("@CatalogName", "小吃"));
command.Parameters.Add(new SqlParameter("@ID" ,1));

int affectCount = command.ExecuteNonQuery();
if (affectCount > 0)
{
      Console.WriteLine("修改成功");
}
 else
{
      Console.WriteLine("修改失败");
}

connection.Close();

如上的内容根本是说道了有关有线连接的方法。笔者上面就是说了发俩种。一种是有线,一栽是无线。关于无线更多是故到SqlDataAdapter类和DataSet类。希望读者们自行钻研。

本章总结

本章主要是道到ADO.NET的片知识点。专对有线连接的片段文化。对于背后开发.NET来讲会有得会支援。不过相信现在产生坏人非亮堂ADO.NET是什么。更多还叫ORM框架取代了。

相关文章