-3

問題が発生し、頭を壁にぶつけています...「dbReader = dbCommand.ExecuteReader();」を呼び出すと、「割り当てられていないローカル変数の使用」が表示され続けます。割り当てられていないローカル変数「dbCommand」の使用を示しています。誰かがこれを見て、私がどこで何を間違っているのか教えてください。よろしくお願いします。

    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();
    }
4

2 に答える 2

1

あなたは行方不明です

OleDbCommand oCommand = new OleDbCommand (sql , dbConnection)

あなたは初期化していますdbAdapter = new OleDbDataAdapter(sql, dbConnection);

代わりは..

また、接続とリーダーの破棄と終了には、代わりに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
  }
于 2012-06-22T19:07:14.570 に答える
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();
于 2012-06-22T19:05:12.787 に答える