请教小段代码~

label_xl 2008-06-03 11:11:11
public DataRecordCollection ListDialoguePreview(LessonQuery query)
{
using (IDbCommand cmd = base.DataContext.CreateCommand(PreviewDialogue, true))
{
base.AddQueryParameters(cmd, query);
DataContext.Open();
IDataReader reader = cmd.ExecuteReader();
return new DataRecordCollection(typeof(DialogueRecordComplete), reader);
}
}

主要想搞明白 base.DataContext.CreateCommand(PreviewDialogue, true)的意思 和 用法
下面是父类:
private DataContext _dataContext;

public DataContext DataContext
{
get { return _dataContext; }
set { if (_dataContext!=null) _dataContext.Dispose(); _dataContext = value; }
}

protected BaseData() : this(new DataContext())
{
}

protected BaseData(DataContext dataContext)
{
_dataContext = dataContext;
}

protected void AddQueryParameters(IDbCommand cmd, SearchQueryBase query)
{
foreach(string key in query)
{
cmd.Parameters.Add(
_dataContext.CreateParameter(cmd, "@" + key, query.GetValue(key))
);
}
}
都给讲讲最好啦 嘿嘿~ 先谢谢了~
...全文
189 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxg22526451 2008-06-03
  • 打赏
  • 举报
回复
MSDN:
base(C# 参考)

base 关键字用于从派生类中访问基类的成员:

调用基类上已被其他方法重写的方法。

指定创建派生类实例时应调用的基类构造函数。

基类访问只能在构造函数、实例方法或实例属性访问器中进行。

从静态方法中使用 base 关键字是错误的。

Jinglecat 2008-06-03
  • 打赏
  • 举报
回复

1.
代码不全...


2.
看看书,多态,继承
叶子 2008-06-03
  • 打赏
  • 举报
回复
就是继承!
江城老温 2008-06-03
  • 打赏
  • 举报
回复



对于base.DataContext,编译器会执行父类的属性public DataContext DataContext,通过该属性的get方法,取到_dataContext的值.到这时候base.DataContext已经成了父类的声明的对象_dataContext了。
后面的CreateCommand()方法的执行要看另一个类DataContext.


----------------------------------------------------------------------------------
private DataContext _dataContext;

public DataContext DataContext
{
get { return _dataContext; }
set { if (_dataContext!=null) _dataContext.Dispose(); _dataContext = value; }
}

HimeTale 2008-06-03
  • 打赏
  • 举报
回复
base应该是你继承的页面吧?DataContext应该是base页的一个成员。
DataContext中应该包含了一个connection.

把DataContext这个类的代码放出来我才能知道CreateCommand(PreviewDialogue, true)
是什么意思。

label_xl 2008-06-03
  • 打赏
  • 举报
回复
自己顶下。
HimeTale 2008-06-03
  • 打赏
  • 举报
回复
public IDbCommand CreateCommand(string text, bool storedProcedure)
返回一个IDbCommand,text是CommandText的内容,storedProcedure布尔型判断是存储过程还是sql语句

public DataContext(string connectionName) //这是方法 还是属性?
public DataContext() : this(DataContext.DefaultConnectionName)
这两个是构造函数。
后面那个表示无参的时候按DataContext(DataContext.DefaultConnectionName)来处理。
DataContext.DefaultConnectionName必须是静态才可以这么做(常量都是静态的)。

private Stack transactions; //声明一个名叫transactions的栈,用来处理transaction(事务)
表示transactions是以栈的方式来处理transaction(注意这个transaction后面没有s)
用栈的方式来处理的好处是后开始的事务需要最先提交(或回滚),正好符合栈的特性。
label_xl 2008-06-03
  • 打赏
  • 举报
回复
没人帮啊?
label_xl 2008-06-03
  • 打赏
  • 举报
回复
public DataContext(string connectionName) //这是方法 还是属性?
public DataContext() : this(DataContext.DefaultConnectionName)
{}//这个方法有什么用?

private Stack transactions; //这是做什么用的?
label_xl 2008-06-03
  • 打赏
  • 举报
回复
谢谢各位大虾。。这是DataContext类的代码:
/// </summary>
public class DataContext
{
#region Static Members
private static NameValueCollection _connectionStrings;
public static NameValueCollection ConnectionStrings
{
get { return _connectionStrings; }
}

static DataContext()
{
_connectionStrings = new NameValueCollection();
}
#endregion

public const string DefaultConnectionName = "MainConnection";

private IDbConnection connection;
private Stack transactions;

public DataContext() : this(DataContext.DefaultConnectionName)
{
}

public DataContext(string connectionName)
{
if (Array.IndexOf(DataContext._connectionStrings.AllKeys, connectionName)==-1)
throw new ArgumentException(
String.Format("ConnectionString '{0}' not found", connectionName)
);

string connectionString = DataContext._connectionStrings[connectionName];

connection = new SqlConnection(connectionString);
transactions = new Stack();
}

public void Open()
{
if (connection.State == ConnectionState.Closed)
connection.Open();
}


public void Close()
{
if (connection.State != ConnectionState.Open && transactions.Count == 0)
connection.Close();
}

public IDbCommand CreateCommand(string text)
{
return CreateCommand(text, false);
}

public IDbCommand CreateCommand(string text, bool storedProcedure)//重写
{
IDbCommand command = connection.CreateCommand();

command.Connection = connection;
command.CommandType = (storedProcedure) ? CommandType.StoredProcedure : CommandType.Text;
command.CommandText = text;

if (transactions.Count > 0)
command.Transaction = (IDbTransaction)transactions.Peek();

return command;
}

public IDbDataParameter CreateParameter(IDbCommand cmd, string name, object value)
{
IDbDataParameter parameter = cmd.CreateParameter();

parameter.ParameterName = name;
parameter.Value = value;

return parameter;
}

public IDbDataParameter CreateParameter(IDbCommand cmd, string name, DbType dbType)
{
return this.CreateParameter(cmd, name, dbType, 0);
}

public IDbDataParameter CreateParameter(IDbCommand cmd, string name, DbType dbType, int size)
{
IDbDataParameter parameter = cmd.CreateParameter();

parameter.ParameterName = name;
parameter.DbType = dbType;
parameter.Size = size;

return parameter;
}

public IDbDataParameter CreateTextParameter(IDbCommand cmd, string name, string value)
{
SqlParameter param = new SqlParameter(name, SqlDbType.Text, 200000);
param.Value = value;
return param;
}

public void BeginTransaction()
{
this.Open();

IDbTransaction transaction = connection.BeginTransaction();
transactions.Push(transaction);
}

public void RollbackTransaction()
{
IDbTransaction transaction = (IDbTransaction)transactions.Pop();
transaction.Rollback();
transaction.Dispose();
}

public void CommitTransaction()
{
IDbTransaction transaction = (IDbTransaction)transactions.Pop();
transaction.Commit();
transaction.Dispose();
}

#region IDisposable Members

public void Dispose()
{
if (connection!=null)
this.Close();

if (this.transactions.Count==0)
{
connection.Dispose();
connection = null;
}
}

#endregion
}
gongsun 2008-06-03
  • 打赏
  • 举报
回复
base.DataContext.CreateCommand(PreviewDialogue, true)

DataContext 是一个 自定义的类 可能在你的 公共层 里。

父类中 定义了 一个 DataContext类型的 DataContext属性

接下来就是 属性传递参数 最后执行与数据库的操作。


CreateCommand(PreviewDialogue, true) 中的true参数可以不用管它,它一般都是表示传参成功的标示。

PreviewDialogue 这个参数在你的 DataContext类中是用什么给它赋值的,它就代表什么。

62,243

社区成员

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

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

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

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