C#怎么用ADODB.RecordSet.open操作Access数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎么用ADODB.RecordSet.open操作Access数据库相关的知识,希望对你有一定的参考价值。

参考技术A c#里提供了ADO.net的数据库操作接口,操作更为简洁方便,为什么不适用ADO.net来操作而还是继续使用以前的ADO呢?

c# Attribute 怎么用

//自定义了一个Attribute
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
class IStudentAttribute : Attribute

public string Name get; set;
public int Age get; set;


//下面是调用
[IStudent(Name = "abc", Age = 20)]
public void F()

//请问,Name 和 Age的值能取到吗?我没看到有什么用啊?

假设你的F()方法是定义在下面这个类里面:
public class MyClass

[IStudent(Name = "abc", Age = 20)]
public void F()




那么可以这么去取值:
Type type = typeof(MyClass);
MethodInfo methodInfo = type.GetMethod("F");
if (methodInfo.IsDefined(typeof(IStudentAttribute), false))

object[] attributes = methodInfo.GetCustomAttributes(typeof(IStudentAttribute), false);
IStudentAttribute studentAttr = (IStudentAttribute)attributes[0];
Console.WriteLine(studentAttr.Name + studentAttr.Age);


实际上,Attribute可以有很多用处,比如说,你可以在某个方法上做标记看有没有权限调用,或者在某个属性上标记,看要如何校验。例如(实在习惯用var关键字了,下面的代码都用var了,还有Linq):
假设我们有这么一个标记来说明操作的权限:

/// <summary>
/// 声明权限的标记
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public class PermissonAttribute : Attribute

public string Role get; set;

public PermissonAttribute(string role)

this.Role = role;


public PermissonAttribute()




有一个操作类应用了该标记:

/// <summary>
/// 文件操作类
/// </summary>
public class FileOperations

/// <summary>
/// 任何人都可以调用Read
/// </summary>
[Permisson("Anyone")]
public void Read()



/// <summary>
/// 只有文件所有者才能Write
/// </summary>
[Permisson("Owner")]
public void Write()




然后我们写一个工具类来检查操作权限

/// <summary>
/// 调用操作的工具类
/// </summary>
public static class OperationInvoker

public static void Invoke(object target, string role, string operationName, object[] parameters)

var targetType = target.GetType();
var methodInfo = targetType.GetMethod(operationName);

if (methodInfo.IsDefined(typeof(PermissonAttribute), false))

// 读取出所有权限相关的标记
var permissons = methodInfo
.GetCustomAttributes(typeof(PermissonAttribute), false)
.OfType<PermissonAttribute>();
// 如果其中有满足的权限
if (permissons.Any(p => p.Role == role))

methodInfo.Invoke(target, parameters);

else

throw new Exception(string.Format("角色0没有访问操作1的权限!", role, operationName));





最后,在使用的时候:
var role = "Anyone";
var opertion = new FileOperations();
// 可以正常调用Read
OperationInvoker.Invoke(operation, "Read", null);
// 但是不能调用Write
OperationInvoker.Invoke(operation, "Write", null);
参考技术A 首先,创建一个自定义的Attribute,并且事先设定我们的Attribute将施加在class的元素上面以获取一个类代码的检查信息。
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.Class)]
public class CodeReviewAttribute : System.Attribute //定义一个CodeReview的Attribute

private string reviewer; //代码检查人
private string date; //检查日期
private string comment; //检查结果信息
//参数构造器
public CodeReviewAttribute(string reviewer, string date)

this.reviewer=reviewer;
this.date=date;

public string Reviewer

get

return reviewer;


public string Date

get

return date;


public string Comment

get

return comment;

set

comment=value;




自定义CodeReviewAttribute同普通的类没有区别,它从Attribute派生,同时通过AttributeUsage表示我们的Attribute仅可以施加到类元素上。
第二步就是使用我们的CodeReviewAttribute, 假如有一个Jack写的类MyClass,检查人Niwalker,检查日期2003年7月9日,于是我们施加Attribute如下:
[CodeReview("Niwalker","2003-7-9",Comment="Jack的代码")]
public class MyClass

//类的成员定义

当这段代码被编译的时候,编译器会调用CodeReviewAttribute的构造器并且把"Niwalker"和"2003-7-9"分别作为构造器的参数。注意到参数表中还有一个Comment属性的赋值,这是Attribute特有的方式,这里可以设置更多的Attribute的公共属性(如果有的话),需要指出的是.NET Framework1.0允许向private的属性赋值
但在.NET Framework1.1已经不允许这样做,只能向public的属性赋值。
第三步就是取出需要的信息,这是通过.NET的反射来实现的:
class test

static void Main(string[] args)

System.Reflection.MemberInfo info=typeof(MyClass); //通过反射得到MyClass类的信息
//得到施加在MyClass类上的定制Attribute
CodeReviewAttribute att=
(CodeReviewAttribute)Attribute.GetCustomAttribute(info,typeof(CodeReviewAttribute));
if(att!=null)

Console.WriteLine("代码检查人:0",att.Reviewer);
Console.WriteLine("检查时间:0",att.Date);
Console.WriteLine("注释:0",att.Comment);



在上面这个例子中,Attribute扮演着向一个类添加额外信息的角色,它并不影响MyClass类的行为。
通过这个例子,可以知道如何写一个自定义的Attribute,以及如何在应用程序使用它.
参考技术B 这个东西..叫特性..当然有些地方也翻译成属性..
但是此属性非彼属性...
在英文中这个叫Attribute,那个叫Property.
Attribute相当于给类或其他定义添加编译时属性.

public void F()

这里面取值 和Attribute有什么关系???
参考技术C 博客园里面作者搜索liulun我同事写过一篇特性的文章

以上是关于C#怎么用ADODB.RecordSet.open操作Access数据库的主要内容,如果未能解决你的问题,请参考以下文章

C#中Substring具体怎么用?(复杂的例子看不懂)

c# 中new ThreadStart()怎么用?这里面怎么传参数?

c# Attribute 怎么用

用truncate清空数据库表所有的数据用C#怎么写啊?

c# combbox 怎么用

怎么用C#访问共享文件夹