2012-06-22 3 views
-3

문제가 발생하여 벽에 머리를 쥐고있었습니다 ... "dbReader = dbCommand.ExecuteReader()"를 호출 할 때 "할당되지 않은 지역 변수 사용" ; " 그것은 할당되지 않은 지역 변수 'dbCommand'의 사용을 말합니다. 누군가 이걸보고 내게 어디에서 무엇을 잘못하고 있는지 말해 주시겠습니까? 미리 감사드립니다.OleDbDataReader를 사용하여 할당되지 않은 로컬 변수 C# 사용

public void computerList() 
    { 
     //Create SQL strings 
     string sql = "SELECT Computers FROM [Sheet1$]"; 

     //Create the instances 
     OleDbConnection dbConnection; 
     OleDbDataAdapter dbAdapter; 
     OleDbCommand dbCommand; 
     OleDbDataReader dbReader; 
     DataTable dataTable; 

     //Call the instance 
     dbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.4.0;Data Source=Y:\\\\serverName\\Share\\document.xls;Extended Properties='Excel 12.0 Xml;HDR=YES'"); 
     dbAdapter = new OleDbDataAdapter(sql, dbConnection); 
     dataTable = new DataTable(); 
     dbConnection.Open(); 
     dbReader = dbCommand.ExecuteReader(); 

     while (dbReader.Read()) 
     { 
      int iRow = dataTable.Rows.Count; 
      //MessageBox.Show("Count " + iRow.ToString()); 
      //MessageBox.Show(dbReader.ToString()); 
      for (int i = 0; i < iRow; i++) 
      { 
       int loopID = i; 
       string rowData = dataTable.TableName; 
       MessageBox.Show("Count" + loopID); 
       MessageBox.Show(dbReader.GetString(iRow)); 
      } 

     } 
     //Close Connections 
     dbReader.Close(); 
     dbConnection.Close(); 
    } 
+5

그것을 다시 것

dbReader.Close(); dbConnection.Close(); 

대신 사용하여 폐기에 대한 진술과 연결 가까운 독자를 사용합니다. 'dbCommand'는 초기화하지 않습니다. –

+4

의심 스러울 때 컴파일러 오류가 실제로 * 정확하다는 것을 신뢰하십시오 ... –

+0

Jon Skeet ... Upvote! –

답변

2

를 초기화 할 필요가 hould 당신이 오류가 나는 ... 같은 물론

public void computerList() 
    { 
     //Create SQL strings 
     string sql = "SELECT Computers FROM [Sheet1$]";  

     using (OleDbConnection dbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.4.0;Data Source=Y:\\\\serverName\\Share\\document.xls;Extended Properties='Excel 12.0 Xml;HDR=YES'")) 
     { 
      //dbAdapter = new OleDbDataAdapter(sql, dbConnection); //You dont need it 
      //dataTable = new DataTable(); //don't need it 
      dbConnection.Open(); 
      using(OleDbCommand oCommand = new OleDbCommand (sql , dbConnection)) 
      { 
       using(OleDbDataReader dbReader = dbCommand.ExecuteReader()) 
       { 
        while (dbReader.Read()) 
        { 
         //int iRow = dataTable.Rows.Count; //always zero you never used the datable 
         //MessageBox.Show("Count " + iRow.ToString()); 
         //MessageBox.Show(dbReader.ToString()); 
         for (int i = 0; i < dbReader.FieldCount; i++) 
         { 
          //int loopID = i; //dont need it 
          //string rowData = dataTable.TableName; //Dont need it 
          MessageBox.Show("Count" + i); 
          MessageBox.Show(dbReader.GetString(i)); 
         } 

        } 
       } //reader closed and disposed   
      }//command disposed 
     } //connection closed and disposed 
    } 
+0

감사합니다. 나는 내가 그 선을 들여다 본 것을 믿을 수 없다! 그거였다! 너 락! – Fidelis

+0

당신이 좋은 재치를 느낀다면, 당신이 가장 좋은 대답이라고 생각한다면, 그것을 받아 들인 것으로 표시하는 것을 잊지 마십시오. 그것이 도움이되었음을 알았습니다. –

0

당신은 대신 dbAdapter = new OleDbDataAdapter(sql, dbConnection);

.. 또한 당신이야

초기화하는 당신은

OleDbCommand oCommand = new OleDbCommand (sql , dbConnection) 

누락 dbCommand

//Call the instance 
dbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.4.0;Data Source=Y:\\\\serverName\\Share\\document.xls;Extended Properties='Excel 12.0 Xml;HDR=YES'"); 
dbCommand = new OleDbCommand("SELECT * FROM TableName", dbConnection); 
dbAdapter = new OleDbDataAdapter(sql, dbConnection); 
dataTable = new DataTable(); 
dbConnection.Open(); 
dbReader = dbCommand.ExecuteReader(); 
+0

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader(v=vs.71).aspx - 그렇게하지 않는다고 가정 해 봅시다. 그것은 당신이 OleDbCommand.ExecuteReader를 호출한다고 말합니다. – Fidelis

+0

@ Spontaneous1980이 문서는'dbCommand.ExecuteReader()'함수에 의해 생성 된 dbReader를 참조하고 있습니다. 귀하의 dataTable은 비어 있습니다. – LarsTech

관련 문제