ADO.NET基础知识汇总(2)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data;//必须 using System.Data.SqlClient;//必须 namespace Command { class Program { static void Main(string[] args) { SqlConnectionStringBuilder conStr = new SqlConnectionStringBuilder(); conSt.DataSource=@".\SQLEXPRESS"; conStr.IntegratedSecurity=true; conStr.InitialCatalog="db_Test"; StringBuilder strSQL = new StringBuilder(); for(int i=0;i<=100;i++) { strSQL.Append("insert into tb_Test"); strSQL.Append("values('"); string name = "test"+i.ToString(); strSQL.Append(name); } using(SqlConnection con = new SqlConnection(conStr.ConnectionString)) { con.Open(); SqlCommand cmd = new SqlCommand(strSQL.ToString(),con); int impactedNumber = cmd.ExecuteNonQuery();//返回受影响的行数 object firstData = cmd.ExecuteScalar();//返回执行结果中的第一行第一列,此方法可用于获取插入数据的ID,(int lineNumber =(int)cmd.ExecuteScalar();) } } } }

SQL参数
若想在程序中传递参数给数据库,可以使用SqlParameter。该类有几个重要的属性:

ParameterName:设置参数名
Value:给参数设置值
Size:设置参数字节最大长度
SqlDbType:参数在SQL中的类别

和几个重要的方法:

AddWithVlue

Add
AddRange

举例说明:

SqlConnection connection =new SqlConnection("")) { SqlCommand cmd = connection.CreateCommand(); cmd.CommandText=""; cmd.Parameters.Add("@name",SqlDbType.NVarChar).Value = "deng";//方法一 cmd.Parameters.AddWithValue(@"name","deng");//方法二 SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@name",SqlDbType.NvarChar,100){Value="deng"}, }; cmd.Parameters.AddRange(parameters);//可以放一个参数数组,包含多条参数,在此只举一个例子 }

可以通过cmd.Parameters[i].Value设置和读取数值。

数据读取

利用查询语句得到的数据信息需要通过数据读取器进行操作。
举例:

SqlConnetion con = new SqlConnection("") { con.Open(); SqlCommand cmd = con.CreateCommand(); cmd.CommandText=""; SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection) { While(dr.Read()) { string str = dr.GetSqlString(0).ToString(); } } }

介绍几个常用的方法:

GetOrdinal:可以获取指定列名的序列号,int name = dr.GetOrdinal(“name”);
GetName:与上面的方法对应,可以通过列号返回列名字。
IsDBNull:判断当前读取的数据是否为Null。
NextResult:当查询为批处理查询时,使用这个方法去获取下一个结果集,返回值为Bool,如果存在多个结果集,则为true;否则为false。
Read:读取数据。

常用属性有:

HasRow:判断是否有数据。
FieldCount:获取读取的列数。
IsClosed:判断读取的数据流是否关闭。
SqlDataReader是连接相关的,也就是说与数据库的连接一断开就无法读取数据库中的数据,说明查询结果并不是放在程序中,而是放在数据库的服务中。

事务

需要用到SqlTransaction类,需要在指定位置命名存储点,该存储点之后的操作都将会回滚。
例子:

SqlConnection con = new SqlConnection(strCon); con.Open(); SqlTransaction transaction = con.BeginTransaction(); SqlCommand cmd = con.CreateCommand(); cmd.CommandText = "" cmd.Transaction = transaction; transaction.Save("transaction point"); transaction.Rollback("transaction point");

数据适配器

SqlDataAdapter类有四个重载构造函数:

无参
SqlDataAdapter(SqlCommand)
SqlDataAdapter(String,SqlConnection)
SqlDataAdapter(String, ConnectionString)
填充数据例子:

DataSet dataSet = new DataSet(); SqlConnection con = new SqlConnection(""); con.Open(); SqlCommand cmd = con.CreateCommand(); cmd.CommandText="select xxx from tb_xxx"; SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd); dataAdapter.Fill(dataSet);

填充后的数据可以使用SqlCommandBuilder进行增删改查。

例子:

SqlConnection con = new SqlConnection(ConnectionString(); con.Open(); SqlDataAdapter da = new SqlDataAdapter("select xxx from tb_xx"); DataSet ds =new DataSet(); da.Fill(ds); SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); DataRow row = ds.Tables[0].NewRow(); row[0]="a"; row[1]="b"; ds.Tables[0].Rows.Add(row); da.Update(ds);

SqlCommandBuilder 可以把DataSet增加的数据转化为SQL语句用来更新数据库。然后调用Update方法。

总结

因为现在使用的框架或着库都已经封装了ADO.NET,可能在日常工作中很少会再从头开始编写ADO.NET来连接数据库,但是在.net面试中还是非常常见的,希望可以借此加深一下印象。另外,本人目前持有的是银蕨签证,可以在新西兰求职9个月,期间如果找到相关专业工作,可直接转2年的工作签证,非常方便移民,该签证每年全球发放300个,虽然还没有working holiday签证为大家所熟知,但是每年的争抢还是很激烈的。需要了解相关事宜的可以给我留言。本人的第一篇博客,属于整理资料,并非完全原创,如有哪方面不正确,还希望大神可以多多指正。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwfsd.html