Использование неназначенной локальной переменной C# с использованием OleDbDataReader
У меня проблема, и я бился головой об стену... Я продолжаю получать "Использование неназначенной локальной переменной", когда я вызываю "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();
}
2 ответа
Решение
Вам не хватает
OleDbCommand oCommand = new OleDbCommand (sql , dbConnection)
вы инициализируете dbAdapter = new OleDbDataAdapter(sql, dbConnection);
вместо..
Кроме того, вы должны использовать инструкции использования для удаления и закрытия подключений и читателей вместо
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
}
Вам нужно инициализировать 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();