開発中のアプリケーションでテストを実行しているときに、OleDbException が発生しました。表示されるエラー メッセージは、「1 つ以上の必須パラメーターに値が指定されていません」です。
この質問は、このサイトで他にも何度か尋ねられているようですが、いずれの場合も、UPDATE
コマンドの実行中に問題が発生します。SELECT
コマンドでエラーがスローされています。混乱を招くために、私はパラメーターを使用しようとさえしていないので、どのパラメーターが期待されているのかわかりません。例外を発生させるメソッドのコードは次のとおりです。
// Array of column letters, used in constructing the select query.
private readonly string[] COLUMN_LABELS = new string[] { "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", "BA", "BB",
"BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL",
"BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV",
"BW", "BX", "BY", "BZ" };
public AvailabilityReader(string spreadsheet, List<ServiceType> sundayList)
{
// Set up a connection to the spreadsheet.
this.spreadsheet = spreadsheet;
Connection = new OleDbConnection(string.Format((Spreadsheet.EndsWith(".xlsx") ?
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;" :
"Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;"), Spreadsheet));
// Set up an adapter for the spreadsheet.
ColumnNames = new List<string>();
var columnString = "[E-mail Address] AS Email";
for (int i = 1; i <= sundayList.Count; i++)
{
columnString += string.Format(", Column{0}", i);
ColumnNames.Add(string.Format("Column{0}", i));
}
var selectCommand = new OleDbCommand(string.Format("SELECT {0} FROM [DATA$O5:{1}300]", columnString, COLUMN_LABELS[sundayList.Count - 1]), Connection);
Adapter = new OleDbDataAdapter(selectCommand);
CommandBuilder = new OleDbCommandBuilder(Adapter);
CommandBuilder.QuotePrefix = "[";
CommandBuilder.QuoteSuffix = "]";
// Obtain the table.
var data = new DataSet();
Adapter.Fill(data, "DATA");
table = data.Tables["DATA"];
}
が呼び出されたときに例外が発生します(Adapter はクラスAdapter.Fill(data, "DATA")
のプライベート プロパティです)。AvailabilityReader
正直なところ、何が起こっているのかわかりませんが、信じられないほど単純なものを見落としていることを完全に期待しています。前もって感謝します!