ADO.Net连接

连接SQLServer

  • 连接字符串:程序通过连接字符串 指定要连哪台服务器上的、哪个实例的哪个数据库、用什么用户名密码等。
  • 项目内嵌mdf文件形式的连接字符串"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;UserInstance=True"。“.\SQLEXPRESS”表示“本机上的SQLEXPRESS实例”,如果数据库实例名不是SQLEXPRESS,则需要修改。“Database1.mdf”为mdf的文件名。
  • ADO.Net中通过SqlConnection类创建到SQLServer的连接,SqlConnection代表一个数据库连接,ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理。
Tip:

Close:关闭以后还能打开。

Dispose:直接销毁,不能再次使用。

为什么用using,using在出了作用域以后调用Dispose,SqlConnection、FileStream等的Dispose,内部都会做这样的判断:判断有没有close,如果没有Close就先Close再Dispose。

(sqlconnection在程序中一直保持它open可以吗?对于数据库来说,连接是非常宝贵的资源,一定要用完了就close、dispose。)


SqlCommand

  • ExecuteNonQuery 返回值是执行的影响行数。
  • ExecuteScalar 方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以返回值是object类型。
  • ExecuteReader 执行返回多行结果集。


SQLHelper

封装一个 SQLHelper类方便使用,提供ExecuteDataTable(string sql,paramsSqlParameter[] parameters)、ExecuteNonQuery(string sql,paramsSqlParameter[] parameters)、ExecuteScalar(string sql,paramsSqlParameter[] parameters)等方法。 

网上有微软提供的最全的SQLHelper类,是EnterpriseLibrary中的一部分。


DataSet

  • 每次读取数据都创建连接、执行Command得到SqlDataReader太麻烦。
  • SqlDataReader是连接相关的,SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。
  • SqlDataReader对于小数据量的数据来说带来的只有麻烦,优点可以忽略不计。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。
  • DataSet dataset = new DataSet(); SqlDataAdapter adapter = newSqlDataAdapter(cmd); adapter.Fill(dataset);
  • SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表
  • DataTable,DataTable包含若干行DataRow。
  • foreach (DataRow row in dataset.Tables[0].Rows)row["Name"]。


DataSet的更新

  • 可以更新行row["Name"] ="yzk"、删除行datatable.Rows.Remove()、新增行datatable.NewRow()。这一切都是修改的内存中的DataSet,没有修改数据库
  • 可以调用SqlDataAdapterUpdate方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet、DataTable或者若干DataRow。但是需要为SqlDataAdapter提供DeleteCommand、UpdateCommand、InsertCommand它才知道如何将对DataSet的修改提交到数据库,由于这几个Command要求的格式非常苛刻,因此开发人员自己写非常困难,可以用SqlCommandBuilder自动生成这几个Command,用法很简单:newSqlCommandBuilder(adapter)。查看生成的Command(没有直接赋值给SqlDataAdapter,看SqlCommandBuilder的)。SqlCommandBuilder要求表必须有主键。
  • 通过DataRow的RowState可以获得行的状态(删除、修改、新增等);
  • 调用DataSet的GetChanges()方法得到变化的结果集,降低传递的资源占用。


弱类型DataSet的缺点

  • 只能通过列名引用,dataset.Tables[0].Rows[0][“Age”],如果写错了列名编译时不会发现错误,因此开发时必须要记着列名。
  • int age =Convert.ToInt32(dataset.Rows[0][“Age”]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错。
  • 将DataSet传递给其他使用者,使用者很难识别出有哪些列可以供使用
  • 运行时才能知道所有列名,数据绑定麻烦,无法使用Winform、ASP.Net的快速开发功能。
  • 自己动手写强类型DataSet(类型化DataSet,TypedDataSet),创建继承自DataSet的PersonDataSet类,封装出int?Age等属性和bool IsAgeNull等方法,向PersonDataSet中填充。


可空数据类型

  • C#中值类型(int、Guid、bool等)是不可以为空的,inti=null是错误的,因此int、bool等这些类型不能表示数据库中的“Null”。因此C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样int? i=null就可以了。解决数据库中int可以为null,而C#中int不能为null的问题。
  • 判断可空类型是否为空,i==null或者i.HasValue;
  • 得到可空变量的值,int i1=(int)i.Value或者int i1=i.Value。
  • 类型转换:不可空类型赋值给可空类型无需显式转换(一定成功),可空类型赋值给不可空类型则需显式转换(不一定成功)。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用ADO.NET连接MySQL数据库的步骤: 1. 下载MySQL Connector/NET,链接为:http://dev.mysql.com/downloads/connector/net/5.0.html,选择.NET & Mono平台,下载免安装的.zip文件。 2. 解压下载的文件,将其中的MySql.Data.dll文件添加到你的项目中。 3. 在代码中引用MySql.Data命名空间。 4. 创建一个MySqlConnection对象,设置连接字符串,连接字符串的格式为:"server=服务器地址;user id=用户名;password=密码;database=数据库名"。 5. 调用MySqlConnection对象的Open()方法打开数据库连接。 6. 执行SQL语句或存储过程,可以使用MySqlCommand对象的ExecuteNonQuery()方法执行非查询语句,使用ExecuteReader()方法执行查询语句并返回一个MySqlDataReader对象,使用ExecuteScalar()方法执行查询语句并返回结果集中的第一行第一列的值。 7. 关闭数据库连接,调用MySqlConnection对象的Close()方法关闭连接。 下面是一个连接MySQL数据库并执行查询语句的示例代码: ```csharp using System; using MySql.Data.MySqlClient; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string connStr = "server=localhost;user id=root;password=123456;database=test"; MySqlConnection conn = new MySqlConnection(connStr); try { conn.Open(); string sql = "SELECT * FROM user"; MySqlCommand cmd = new MySqlCommand(sql, conn); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["id"] + "\t" + reader["name"] + "\t" + reader["age"]); } reader.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { conn.Close(); } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值