32.2高效地使用连接

sqlConnection类是针对sql的,而OleDbConnection 是针对其他比如access的,另外还有odbcConnection是针对odbc的,sql的访问优势就在于它可以调用高性能的sql控制访问语句!

32.2.3 事务

如使用Transactions类须引用下面文件(在不支持务事的数据库时,可以用以下操作)

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Transactions.dll
string source = "server=(local);integrated security=SSPI;database=Northwind";//如果是SqlExpress则使用./sqlexpress,Northwind表示数据库名称
try
{
using (var scope = new TransactionScope(TransactionScopeOption.Required))//如果有环境事务,使用环境,不然新建事务,默认值,其它查看文档
{
using (SqlConnection conn = new SqlConnection(source))//托管释放所有资源
{
conn.Open();
conn.Close();//在后面有程序时,应尽早释放
scope.Complete();//如果没完成,因没有调用Complete方法!事务会回滚!
}
}
}
catch (SqlException e) //抛出SQL异常,是SqlException类
{
throw;//异常操作
}

32.3命令

以下代码中Conn为open后的connection类:操作方法有以下三种

string select = "SELECT ContactName FROM Customers";
SqlCommand cmd = new SqlCommand(select, conn); //执行select变量中的SQL命令
SqlCommand cmd = new SqlCommand("testpray", conn); //存储过程名称
cmd.CommandType = System.Data.CommandType.StoredProcedure;//指定解释命令字符串为存储过程
cmd.Parameters.AddWithValue("@prayname", "it");//参数@prayname为SQL存储过程的参数名,it为值
using (OleDbConnection conn = new OleDbConnection(source))//注意这里是OleDb
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("Categories", conn);
cmd.CommandType = System.Data.CommandType.TableDirect;//TableDirec命令只对OleDb有效
}

方法2中调用的SQL存储过程

create proc testpray
@prayname char(8)
as
declare @_id int
select @_id =COUNT(id)+1 from test
insert into test(id,name)values(@_id,@prayname)
return 1
--下面是测试显示
declare @str int
exec @str = testpray artre
select @str

32.3.1执行命令

方法 说明
ExecuteNonQuery() 执行,不返回结果,返回影响的行数(int)
ExecuteReader() 执行,返回一个类型化的IDataReader (SqlDataReader)
ExecuteScalar() 执行,返回结果第一行的第一列的值 (object)
ExecuteXmlReader() 执行,返回一个XmlReader对象,可以遍历从数据库返回的XML片段(XmlReader)

ExecuteXmlReader方法中适用于SQLClient

string select = "SELECT ContactName FROM Customers FOR XML AUTO";
//语句后面加入FOR XML AUTO 把FROM子句中的表构建一棵树,FOR XML RAW把结果集中的行映射到元素,其中的列映射到属性,FOR XML EXPLICIT指定要返回的XML树形状
SqlConnection conn =new SqlConnection(GetDatabaseConnection());
SqlCommand cmd = new SqlCommand(select, conn);
XmlReader xr = cmd.ExecuteXmlReader();//XML的操作方法
xr.Read();
string data;
do
{
data = xr.ReadOuterXml();
if (!string.IsNullOrEmpty(data))
Console.WriteLine(data);
} while (!string.IsNullOrEmpty(data));
conn.Close()

. 1调用存储过程(重复调用同一存储过程时)可以用以下方式

SqlCommand cmd = new SqlCommand("testpray", conn); //存储过程名称
cmd.CommandType = System.Data.CommandType.StoredProcedure;//指定解释命令字符串为存储过程
cmd.Parameters.Add(new SqlParameter("@prayname",System.Data.SqlDbType.Char,, "prayname"));//用参数名称、 SqlDbType、大小和源列名称初始化 SqlParameter 类的新实例。
cmd.UpdatedRowSource = System.Data.UpdateRowSource.None;//不返回参数(可以改为输出的转到一个表中)
cmd.Parameters["@prayname"].Value = "it2"; //修改
cmd.ExecuteNonQuery(); //执行
cmd.Parameters["@prayname"].Value = "open";
cmd.ExecuteNonQuery();

1,调过带参数输出的存储过程

cmd.Parameters.Add(new SqlParameter("@prayname", System.Data.SqlDbType.Char, , "prayname"));//用参数名称、 SqlDbType、大小和源列名称初始化 SqlParameter 类的新实例。
cmd.Parameters.Add(new SqlParameter("@outid", System.Data.SqlDbType.Int, , ParameterDirection.Output, false, , , "outid", DataRowVersion.Default, null));
cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;//输出参数到映射的行
cmd.Parameters["@prayname"].Value = "it2";
cmd.ExecuteNonQuery();
int newOutId =(int) cmd.Parameters["@outid"].Value; //取值

32.5异步数据访问(不懂呀!!放着先)

public async static Task<int> GetEmployeeCount()
{
using (SqlConnection conn = new SqlConnection(GetDatabaseConnection()))
{
SqlCommand cmd = new SqlCommand("WAITFOR DELAY '0:0:1';select count(*) from employees", conn);
conn.Open();
return await cmd.ExecuteScalarAsync().ContinueWith(t => Convert.ToInt32(t.Result)); //异步数据处理,先了解相关格式
}
}
 

32.6管理数据和关系:DataSet类

string select = "select ContactName,CompanyName from Customers";
using (SqlConnection conn = new SqlConnection(source))
{
SqlDataAdapter da = new SqlDataAdapter(select, conn);//注意这里不SqlDataAdapter,不须要conn.open()
DataSet ds = new DataSet(); //实例数据库
da.Fill(ds, "Customers1"); //适配数据库,适配的表名为Customers1
foreach (DataRow row in ds.Tables["Customers1"].Rows) //遍历
Console.WriteLine("'{0}' from {1}", row[], row[]);
}

2手工编织架构

/// <summary>
/// 在实例化DataSet后调用,以便格式化DataSet,这样就能对DataTable中的数据进行类型安全访问
/// </summary>
/// <param name="ds">实例</param>
public static void ManufactureProductDataTable(DataSet ds)
{
DataTable products = new DataTable("products");
products.Columns.Add(new DataColumn("productID", typeof(int)));
products.Columns.Add(new DataColumn("name", typeof(string)));
ds.Tables.Add(products);
}

32.6.3数据关系

设置主键

public static void manufactrireprimaryKey(DataTable dt)
{
DataColumn[] pk = new DataColumn[];
pk[] = dt.Columns["id"];
dt.PrimaryKey = pk;
}

42.1 ASP.NET MVC

路由机制 网络介绍链接

最新文章

  1. Bash:-:-通过while和shift判断脚本位置参数格式是否合法
  2. 安装金山WPS2013造成的HTML5 file.type值异常
  3. iOS权限管理思路
  4. ODAC(V9.5.15) 学习笔记(十六)直接访问模式
  5. PHP慢脚本日志和Mysql的慢查询日志(转)
  6. 外部表与partition
  7. hdu3006之位压缩
  8. Hadoop文件的基本操作
  9. 将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)
  10. 登录SQL注入
  11. oracle默认用户名及密码
  12. [luogu]P1352 没有上司的舞会[树形DP]
  13. Hibernate 一对一关联映射,mappedBy参数解析
  14. RecyclerView 与 Scrollview 搭配使用的两个坑
  15. 基于Servlet的MVC模式用户登录实例
  16. Sublime Text3 离线安装Package Control并使用GBK编码 --转自https://blog.csdn.net/swhard/article/details/78930371
  17. maven dependency的版本冲突问题
  18. Mysql的使用,常用的SQL语句
  19. cocos2dx开发之util类&amp;方法——取当前系统时间
  20. Java基础(basis)-----抽象类和接口详解

热门文章

  1. 顺序表 C++ 类模板实现
  2. 【转】网站出现service unavailable的解决方法
  3. 当执行一条查询语句时,MySQL内部经历了什么?
  4. HDU6719 Strassen(__int128)
  5. 使用 wx.navigateBack返回页面并携带参数的处理方式
  6. jmeter之集合点的使用
  7. $_POST,$_GET,$_REQUEST区分
  8. 单例模式(Singleton Patten)
  9. MyEclipse下Junit报错&quot;The input type of the launch configuration&quot;
  10. Xshell实现Windows和使用跳板机跳转的远程Linux互传文件