0

誰かが私がここで間違っていることを教えてもらえますか?コードをコンパイルし、ROWSを読み取ってカウントを返すようにしました。ただし、次のコード行にインデックスを渡すと、「インデックスが配列の境界外にありました」と言うとエラーが発生します。rowData+ = dbReader.GetValue(iRow).ToString();

            //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.12.0;Data Source='" + @"\\slcnpr97\Desktop\Game Changers\\computers.xls" + "';Extended Properties='Excel 12.0 Xml;HDR=YES'");
            dbConnection.Open();
            dbAdapter = new OleDbDataAdapter(sql, dbConnection);
            dbCommand = new OleDbCommand(sql, dbConnection);
            dataTable = new DataTable();
            dbReader = dbCommand.ExecuteReader();
            dbAdapter.Fill(dataTable);

            //Method Variable
            int iRow = dataTable.Rows.Count;
            string rowData = null;

            while (dbReader.Read())
            {

                for (int i = 0; i < iRow; i++)
                {
                    rowData += dbReader.GetValue(iRow).ToString();
                }

            }
            //Close Connections 
            dbReader.Close();
            dbConnection.Close();
            MessageBox.Show(rowData);
4

2 に答える 2

2

変更する必要があります

int iRow = dataTable.Rows.Count;

int numFields = dbReader.FieldCount;

forループは次のようになります

for (int i = 0; i < numFields; i++)
{
    rowData += dbReader.GetValue(numFields).ToString();
}
于 2012-06-22T21:53:18.520 に答える
0
try with (Set dbReader.GetValue(0).ToString())

while (dbReader.Read())
            {

                for (int i = 0; i < iRow; i++)
                {
                    rowData += dbReader.GetValue(0).ToString();
                }

            }
于 2012-06-22T21:48:19.043 に答える