1

18列のExcelシートがあります。その5つの列には同じ列名がありCALL_REASONます。しかし、Microsoft.ACE.OLEDB.12.0 を使用してその Excel シートをデータセットに読み込むと、. 同じ名前の列について、データセットの列名が変更されます。としてロードされていCALL_REASON,CALL_REASON1,CALL_REASON2,CALL_REASON3,CALL_REASON4ます。それらはExcelシートに次のように存在しますCALL_REASON,CALL_REASON,CALL_REASON,CALL_REASON,CALL_REASON

String properties = "Excel 8.0; HDR=YES; IMEX=1;";//properties set for connection to excel
string sSourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\uploads\" + fileName + ";Extended Properties=\"" + properties + "\"";

sSourceConnection = new OleDbConnection(sSourceConstr);//creating the OLEDB connection
try
{
    //select statement to select data from the first excel sheet
    string sql = string.Format("Select * FROM [{0}]", "Sheet1$");

    //commands to fill the dataset with excel data
    OleDbDataAdapter excelAdapter = new OleDbDataAdapter();
    OleDbCommand command = new OleDbCommand(sql, sSourceConnection);
    sSourceConnection.Open();
    excelAdapter.SelectCommand = command;
    excelAdapter.Fill(surveyItemDetails, "ExcelDataTable");
}
4

2 に答える 2

1

DataTable に同じ名前のフィールドを含めることはできません。CALL_REASON実際、 andを持つことさえできません。CALL_reasonたとえば、DataColumnCollection.AddExceptionsのドキュメントのセクションを参照してください。

DuplicateNameException

コレクションには、指定された名前の列が既に存在します。(比較では大文字と小文字は区別されません。)

列名が一意でなければならないという要件は完全に理にかなっています。DataRow.Field<String>("CALL_REASON")その名前で複数の列を持つことが許可されている場合、によって返されるものは何ですか?

于 2012-08-02T05:36:33.213 に答える
0

アクセスによって列名が変更されている可能性があります。同じ名前のフィールドをデータベースに含めることはできますか?私はそうは思わない。*以外の選択を行う場合、同じ名前のフィールドが多数ある場合、どのように呼び出し理由を選択しますか。実験するには、Excelを使用して列のあるデータをCSVファイルにエクスポートしてみてください。次に、CSVファイルをAccessにインポートしてみます。列名を保持するか、キーとしてフィールドを選択するか、Accessに作成させるかを尋ねるウィザードがあります。テーブルなどを追加または作成するには...Accessは、列名を使用できないかどうかを通知し、列名を作成します。

于 2012-08-02T05:25:46.213 に答える