2012-06-22 42 views
-3

我遇到問題並且一直在敲我的頭aginst牆...當我調用「dbReader = dbCommand.ExecuteReader()」時,我總是收到「使用未分配的本地變量」 ;」它說使用未分配的本地變量'dbCommand'。請有人看看這個,並告訴我我在哪裏做什麼錯了?先進的謝謝你。使用未分配的本地變量c#使用OleDbDataReader

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

當然你得到這個錯誤。你永遠不會初始化'dbCommand'。 –

+4

如果有疑問,請相信編譯器錯誤真的*是*正確的... –

+0

Jon Skeet ... Upvote! –

回答

2

你缺少

OleDbCommand oCommand = new OleDbCommand (sql , dbConnection) 

要初始化dbAdapter = new OleDbDataAdapter(sql, dbConnection);

,而不是..

也是英語新HOULD使用using語句對於處置和關閉的連接和讀者,而不是

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

我把它改寫這樣的...

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

您需要初始化的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該文檔引用dbReader,它由'dbCommand.ExecuteReader()'函數創建。順便說一下,你的dataTable是空的。 – LarsTech