CommandType.Text代表执行的是SQL语句
CommandType.StoreProcedure代表执行的是存储过程
CommandType代表要执行的类型
微软提供的oracle 数据库连接对象 OleDbConnection ,类似于sqlserver 的 SQLConnnection 。相比之下前者的性能、安全性、容量等比后者要强大,费用也较高,广泛应用于大中型企业。两种数据库语法差别不大,会用一个另一个差不多也会。
OleDbCommandBuilder用于
OleDbCommandBuilder cmdb=new OleDbCommandBuilder(adapter);
用于OleDbDataAdapter的对象。
而OleDbCommand用于
OleDbCommand ldcmd=new OleDbCommand(sql,olecon);
用于OleConnection和SQL语句这两个参数对象。
在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。 例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含“startle”,而 z.insert(4, "le") 将更改字符串生成器,使之包含“starlet”。 通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。 将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer
字符串生成器
ExecuteNonQuery() 执行sql语句 并返回受影响的行数。
OleDbDataAdapter 充当 DataSet 和数据源之间的桥梁,用于检索和保存数据。OleDbDataAdapter 通过以下方法提供这个桥接器:使用 Fill 将数据从数据源加载到 DataSet 中,并使用 Update 将 DataSet 中所作的更改发回数据源。
当 OleDbDataAdapter 填充 DataSet 时,它将为返回的数据创建适当的表和列(如果它们尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用 FillSchema,让 OleDbDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。
请注意,包括 MSDataShape 提供程序在内的某些 OLE DB 提供程序并不返回基表或主键信息。因此,OleDbDataAdapter 无法对任何已创建的 DataTable 正确设置 PrimaryKey 属性。在这些情况下,应该为 DataSet 中的表显式地指定主键。
OleDbDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,以便于数据的加载和更新。
当创建 OleDbDataAdapter 的实例时,属性都设置为其初始值.
OleDbDataAdapter类是对数据库系统运行各种操作的一个一般性的类,包括数据的插入、删除、更新等操作。
事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。
在 ADO.NET 中,可以使用 Connection 和 Transaction 对象来控制事务。可以使用 Connection.BeginTransaction 启动本地事务。一旦开始一个事务,就可以使用 Command 对象的 Transaction 属性在该事务中登记命令。然后,可以根据事务组件的成功或失败情况,使用 Transaction 对象提交或回滚在数据源中所做的修改。
还可以使用 Connection.EnlistDistributedTransaction 在现有的分布式事务中登记。在现有的分布式事务中登记可以确保当提交或回滚整个分布式事务时,也提交或回滚对数据源所作的代码修改。
以下示例创建一个 OleDbConnection 和一个 OleDbTransaction。它还演示了如何使用 BeginTransaction、Commit 和 Rollback 方法。
public void RunOleDbTransaction(string myConnString)
{
OleDbConnection myConnection = new OleDbConnection(myConnString);
myConnection.Open();
OleDbCommand myCommand = myConnection.CreateCommand();
OleDbTransaction myTrans;
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = \"Insert into Region (RegionID, RegionDescription) VALUES (100, \'Description\')\";
myCommand.ExecuteNonQuery();
myCommand.CommandText = \"Insert into Region (RegionID, RegionDescription) VALUES (101, \'Description\')\";
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine(\"Both records are written to database.\");
}
catch(Exception e)
{
try
{
myTrans.Rollback();
}
catch (OleDbException ex)
{
if (myTrans.Connection != null)
{
Console.WriteLine(\"An exception of type \" + ex.GetType() +
\" was encountered while attempting to roll back the transaction.\");
}
}
Console.WriteLine(\"An exception of type \" + e.GetType() +
\" was encountered while inserting the data.\");
Console.WriteLine(\"Neither record was written to database.\");
}
finally
{
myConnection.Close();
}
}
OleDbTransaction.Commit 方法
提交数据库事务。
public virtual void Commit();
OleDbTransaction.Rollback 方法
从挂起状态回滚事务。
public virtual void Rollback();
OleDbConnection.BeginTransaction 方法
开始数据库事务。
public OleDbTransaction BeginTransaction();
以当前的 IsolationLevel 值开始数据库事务。
public OleDbTransaction BeginTransaction(IsolationLevel);
IsolationLevel 枚举?
指定连接的事务锁定行为。 在执行事务时,.NET Framework 数据提供程序使用 IsolationLevel 值。在显式更改之前,IsolationLevel 保持有效,但是可以随时对它进行更改。新值在执行时使用,而不是在分析时使用。如果在事务期间更改,服务器的预期行为是,对其余所有语句应用新的锁定级别。
IsolationLevel成员 ReadCommitted
在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。
OleDbConnection.CreateCommand 方法
创建和返回一个与 OleDbConnection 相关联的 OleDbCommand 对象。
public OleDbCommand CreateCommand();
OleDbCommand.Connection 属性
获取或设置 OleDbCommand 的此实例使用的 OleDbConnection。
public OleDbConnection Connection {get; set;}
如何在.NET中实现事务(1)
如何在.NET中实现事务机制呢? 通常可以使用2种方式: 直接写入到sql 中;使用ADO.NET 实现。下面依次作一下介绍:
方法1:直接写入到sql 中
使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现:
例如
BEGIN TRANS
DECLARE @orderDetailsError int, @productError int
DELETE FROM \"Order Details\" WHERE ProductID=42
SELECT @orderDetailsError = @@ERROR
DELETE FROM Products WHERE ProductID=42
SELECT @productError = @@ERROR
IF @orderDetailsError = 0 AND @productError = 0
COMMIT TRANS
ELSE
ROLLBACK TRANS
这种方法比较简单,具体可以查阅相关sql server 帮助
ServiceLocator类对配置文件各种配置位置的集中管理:
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Reflection;
namespace Kufolin.DBUtility
{
/**////
/// 类 编 号: 03
/// 类 名 称: ServiceLocator
/// 内容摘要: 对配置文件各种配置位置的集中管理
/// 完成日期: 2007-12-9 17:37:38
/// 编码作者: 田长军
///
public sealed class ServiceLocator
{
public ServiceLocator() { }
/**////
/// 各个IDAL对象所在的命名空间路径
///
private static readonly string dalPath = ConfigurationManager.AppSettings["ProjectDAL"];
/**////
/// Model对象所在的命名空间路径
///
private static readonly string modelPath = ConfigurationManager.AppSettings["ModelAssembly"];
/**////
/// 连接字符串
///
private static readonly string sqlPath = ConfigurationManager.ConnectionStrings["SQLConnString"].ConnectionString;
/**////
/// 对DAL层的反射机制封装
///
/// 需生成的类名
///
public static object LocateDALObject(String className)
{
string fullPath = dalPath + "." + className;
return Assembly.Load(dalPath).CreateInstance(fullPath);
}
/**////
/// 返回Model的路径
///
///
public static String LocateModelPath()
{
return modelPath;
}
/**////
/// 返回Sql连接字符串
///
///
public static String LocateSqlPath()
{
return sqlPath;
}
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25101015/viewspace-682198/ ,如需转载,请注明出处,否则将追究法律责任。