2014-08-27 6 views
1

C#을 사용하여 Access db (.accdb)를 쿼리하려고합니다. 아래 코드는 main()의 Console.WriteLine (rs.Fields.Item (0) .Value); 필드에 포함 된 값을 실제로 보려고하는 줄에 올 때까지 잘 작동합니다.'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

당신은 내가 볼 수있는에서 잘못 필드 이름에 액세스하려고합니다. To : ('rs.fields [ "LAST_NAME"].) ToString()' – MethodMan

+0

이 기술을 OleDB와 함께 사용하면이'SO'의 답변 섹션에 좋은 예제가 있습니다. 이전 게시물 http :// /stackoverflow.com/questions/930/how-do-i-connect-to-a-database-and-loop-over-a-recordset-in-c – MethodMan

+0

내 질문에 찬성 한 사람 : 누구든 도와주세요. 내가 어떻게 내 질문을 향상시킬 수 있는지에 대한 제안을함으로써? – johncroc

답변

1

내가 볼 수있는 것에서 잘못 필드 이름에 액세스하려고합니다. 뭔가를하려고이

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

또는

rs.fields["LAST_NAME"].Value; should work as well