谁能提供EnterpriseLibrary June 2005 里 DAAB ParameterCache的用法实例!!

nutpp 2005-11-26 02:08:45

一直没有找到使用的方法,文档里好像也没有


...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanlixin4csdn 2005-11-26
  • 打赏
  • 举报
回复
我感觉我贴的还是不够细.:-)


//===============================================================================
// Microsoft patterns & practices Enterprise Library
// Data Access Application Block
//===============================================================================
// Copyright ?Microsoft Corporation. All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===============================================================================

#if UNIT_TESTS
using System;
using System.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Tests;
using NUnit.Framework;

namespace Microsoft.Practices.EnterpriseLibrary.Data.Sql.Tests
{
[TestFixture]
public class SqlParameterDiscoveryFixture : ParameterDiscoveryFixture
{
[SetUp]
public void SetUp()
{
DatabaseProviderFactory factory = new DatabaseProviderFactory(new TestConfigurationContext());
this.db = factory.CreateDefaultDatabase();
storedProcedure = db.GetStoredProcCommandWrapper("CustOrdersOrders", "ALFKI");
connection = db.GetConnection();
connection.Open();
storedProcedure.Command.Connection = connection;
cache = new ParameterCache();
}

[Test]
public void CanGetParametersForStoredProcedure()
{
cache.FillParameters(storedProcedure, '@');
Assert.AreEqual(2, storedProcedure.Command.Parameters.Count);
Assert.AreEqual("@RETURN_VALUE", ((IDataParameter)storedProcedure.Command.Parameters["@RETURN_VALUE"]).ParameterName);
Assert.AreEqual("@CustomerID", ((IDataParameter)storedProcedure.Command.Parameters["@CustomerId"]).ParameterName);
}

[Test]
public void UseParameterCachingWithPersistSecurityInfoFalse()
{
try
{
DeleteUser();
CreateUser();

DatabaseProviderFactory factory = new DatabaseProviderFactory(new TestConfigurationContext());
Database dbsec = factory.CreateDatabase("NorthwindPersistFalse");
connection = dbsec.GetConnection();
connection.Open();

DBCommandWrapper storedProc1 = dbsec.GetStoredProcCommandWrapper("CustOrdersOrders", "ALFKI");
storedProc1.Command.Connection = connection;
TestCache testCache = new TestCache();
testCache.FillParameters(storedProc1, '@');

DBCommandWrapper storedProc2 = dbsec.GetStoredProcCommandWrapper("CustOrdersOrders", "ALFKI");
storedProc2.Command.Connection = connection;
testCache.FillParameters(storedProc2, '@');

Assert.IsTrue(testCache.CacheUsed);
}
finally
{
DeleteUser();
}

}

private void CreateUser()
{
DatabaseProviderFactory factory = new DatabaseProviderFactory(new TestConfigurationContext());
Database adminDb = factory.CreateDefaultDatabase();
connection = adminDb.GetConnection();
connection.Open();
string query;
DBCommandWrapper addUser;
try
{
query = string.Format("exec sp_addlogin '{0}', '{1}', 'Northwind'", TestConfigurationContext.NorthwindDummyUser, TestConfigurationContext.NorthwindDummyPassword);
addUser = adminDb.GetSqlStringCommandWrapper(query);
adminDb.ExecuteNonQuery(addUser);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
try
{
query = string.Format("exec sp_grantdbaccess '{0}', '{0}'", TestConfigurationContext.NorthwindDummyUser);
addUser = adminDb.GetSqlStringCommandWrapper(query);
adminDb.ExecuteNonQuery(addUser);
}
catch
{
}
try
{
query = string.Format("exec sp_addrolemember N'db_owner', N'{0}'", TestConfigurationContext.NorthwindDummyUser);
addUser = adminDb.GetSqlStringCommandWrapper(query);
adminDb.ExecuteNonQuery(addUser);
}
catch
{
}
}

private void DeleteUser()
{
DatabaseProviderFactory factory = new DatabaseProviderFactory(new TestConfigurationContext());
Database adminDb = factory.CreateDefaultDatabase();
connection = adminDb.GetConnection();
connection.Open();
string query;
DBCommandWrapper dropUser;
try
{
query = string.Format("exec sp_revokedbaccess '{0}'", TestConfigurationContext.NorthwindDummyUser);
dropUser = adminDb.GetSqlStringCommandWrapper(query);
adminDb.ExecuteNonQuery(dropUser);
}
catch
{
}
try
{
query = string.Format("exec sp_droplogin '{0}'", TestConfigurationContext.NorthwindDummyUser);
dropUser = adminDb.GetSqlStringCommandWrapper(query);
adminDb.ExecuteNonQuery(dropUser);
}
catch
{
}
}

[Test]
public void IsCacheUsed()
{
TestCache testCache = new TestCache();
testCache.FillParameters(storedProcedure, '@');

DBCommandWrapper storedProcDuplicate = db.GetStoredProcCommandWrapper("CustOrdersOrders", "ALFKI");
storedProcDuplicate.Command.Connection = connection;
testCache.FillParameters(storedProcDuplicate, '@');

Assert.IsTrue(testCache.CacheUsed, "Cache is not used");
}

[Test]
public void CanDiscoverFeaturesWhileInsideTransaction()
{
using (IDbConnection connection = db.GetConnection())
{
connection.Open();
IDbTransaction transaction = connection.BeginTransaction();
DBCommandWrapper storedProcedure = db.GetStoredProcCommandWrapper("CustOrdersOrders", "ALFKI");
storedProcedure.Command.Connection = transaction.Connection;
storedProcedure.Command.Transaction = transaction;

storedProcedure.DiscoverParameters('@');

Assert.AreEqual(2, storedProcedure.Command.Parameters.Count);
}
}
}
}

#endif




///*************************///
这两年来慢慢习惯了光说不练
///*************************///
yanlixin4csdn 2005-11-26
  • 打赏
  • 举报
回复
源代码里代的单元测试是很好的例子.

///*************************///
这两年来慢慢习惯了光说不练
///*************************///
yanlixin4csdn 2005-11-26
  • 打赏
  • 举报
回复
public void CanGetParametersForStoredProcedure()
{
cache.FillParameters(storedProcedure, '@');
Assert.AreEqual(2, storedProcedure.Command.Parameters.Count);
Assert.AreEqual("@RETURN_VALUE", ((IDataParameter)storedProcedure.Command.Parameters["@RETURN_VALUE"]).ParameterName);
Assert.AreEqual("@CustomerID", ((IDataParameter)storedProcedure.Command.Parameters["@CustomerId"]).ParameterName);
}

///*************************///
这两年来慢慢习惯了光说不练
///*************************///
nutpp 2005-11-26
  • 打赏
  • 举报
回复
拜托!如果Quickstart里有,我还发什么帖子?
yanlixin4csdn 2005-11-26
  • 打赏
  • 举报
回复
TestCache testCache = new TestCache();
testCache.FillParameters(storedProcedure, ':');

DBCommandWrapper storedProcDuplicate = db.GetStoredProcCommandWrapper("CustOrdersOrders", "ALFKI", null);
storedProcDuplicate.Command.Connection = connection;
testCache.FillParameters(storedProcDuplicate, ':');

Assert.IsTrue(testCache.CacheUsed, "Cache is not used");

///*************************///
这两年来慢慢习惯了光说不练
///*************************///
yanlixin4csdn 2005-11-26
  • 打赏
  • 举报
回复
不是带 Quickstart 吗?
不够该不会是让我把 Quickstart 发给你吧.
Quickstart讲的已经可以了.还要什么例子?

///*************************///
这两年来慢慢习惯了光说不练
///*************************///

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧