2014-08-27 44 views
1

使用C#,我试图查询Access数据库(.accdb)。下面的代码工作正常,直到它实际尝试查看包含在字段中的值:Console.WriteLine(rs.Fields.Item(0).Value);)in main()。'adodb.fields'不包含'Item'的定义

我已经搜索上的警告消息:

“ADODB.Fields”不包含关于“项”和没有扩展方法“项”接受“ADODB.Fields”的第一参数类型的定义可以找到(是否缺少using指令或程序集引用?)

同时,我会搜索“C#ADODB如何引用单个域”,在这些搜索出现 一切都表明,“项目'应该是'ADODB.Recordset.Fields'命名空间的成员;或者向我展示如何使用迭代器遍历当前记录中的每个字段,这不是我想要的。

我有“使用ADODB;”指令在我的代码,以及“adodb”参考: (我的声望级别不允许我发布我准备的屏幕剪辑,所以我想你必须听取我的话)。

如何引用Fields集合中的单个字段? (最好通过名称,但我也可以与索引住在一起)

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using ADODB; 
using iTextSharp; 


namespace HistAssessPDF 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void cmdCreatePDFs_Click(object sender, EventArgs e) 
     { 
      main(); 
     } 

     private void main() 
     { 
      // throw new NotImplementedException(); 
      string strConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
           "Data Source='C:\\MyLocalDirectory\\MyAccessdb.accdb';" + 
           "Persist Security Info=False;"; 

      Connection db = new Connection(); 
      db.Open(strConnStr); 

      Recordset rs = new Recordset(); 

      rs.ActiveConnection = db; 
      rs.CursorType = CursorTypeEnum.adOpenForwardOnly; 
      rs.LockType = LockTypeEnum.adLockReadOnly; 
      rs.Open("select LAST_NAME from ClientTbl;"); 
      while (!rs.EOF) 
      { 
       Console.WriteLine(rs.Fields.Item("LAST_NAME").Value); //also tried rs.Fields.Item(0).Value 
       rs.MoveNext(); 
      } 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void Form1_FormClosing(object sender, EventArgs e) 
     { 
      // Code in here to clean things up (sever connection to db, destroy objects, etc.) before actually exiting the app 
      MessageBox.Show("I'm about to close."); 
     } 

     private void cmdClose_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 
    } 
} 
+0

你正试图从我所看到的不当访问的字段名称。尝试这样的东西 'rs.fields [“LAST_NAME”]。ToString()' – MethodMan 2014-08-27 18:03:52

+0

我会考虑在OleDB中使用这种技术,这里有一些很好的工作示例,在这个'SO'的答案部分上一篇文章 http:/ /stackoverflow.com/questions/930/how-do-i-connect-to-a-database-and-loop-over-a-recordset-in-c – MethodMan 2014-08-27 18:07:00

+0

谁投了我的问题:你能帮我吗通过提出如何改善我的问题的建议? – johncroc 2014-08-27 18:08:46

回答

1

您试图从我所能看到的错误地访问字段名称。尝试这样的事情

rs.fields["LAST_NAME"].ToString(); //this should do the trick 

rs.fields["LAST_NAME"].Value; should work as well 
相关问题