小さな 4 列のスプレッドシート (.xlsx) からデータを取得する C# プログラムがあります。最初の列は問題なく読み取りますが、2 番目の列になると次のエラーが発生します。
「指定されたキャストは無効です」
セルの形式を確認して再確認しましたが、問題なく読み取れる最初の列と 2 番目の列に違いはありません。以下は、スプレッドシートの最初の行の値です。各値は、1 つの個別の列を表します。
121220 330004 デュアル 2012 年 2 月 22 日
そして、ここに私が使用しているコードがあります。Id 変数は正常にロードされます。問題を引き起こしているのは courseCode です。
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;"
+ "Data Source=C:\Projects\sym_AgentServices_INT\Book1.xlsx;"
+ "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
string queryString = "SELECT * FROM [CE$]";
try
{
OleDbDataReader reader;
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
connection.Open();
reader = command.ExecuteReader();
while (reader.Read())
{
string Id = "";
string courseCode = "";
string partner = "";
string effectiveDate = "";
string expirationDate = "";
Id = reader.GetString(0);
courseCode = reader.GetString(1);
partner = reader.GetString(2);
effectiveDate = reader.GetString(3);
expirationDate = reader.GetString(4);
}
}
}
編集
実行時にリーダー オブジェクトを分析したところ、次のことがわかりました。base を何度も展開し、System.Data.OleDb.OleDbDataReader の _bindings プロパティを開くと、エントリが 1 つしかないことがわかりました ("0")。 . ただし、0 を開いて _columnBindings プロパティを展開すると、0 ~ 4 の値が見つかります。
リーダー ("reader.GetString(x)") からデータを抽出するときに構文が正しくない可能性はありますか?
最終編集
.GetString(x) を使用する代わりに、reader[x].ToString() を使用することを強くお勧めします。これで問題は解決しました。