我試圖使用BulkInsert將數據從Excel電子表格添加到SQL Server中的表中。在線幫助非常好,但是我收到了一個我不明白的錯誤。OleDbDataReader - 沒有給出一個或多個所需參數的值
這裏是我使用來獲取和保存目標Excel文件(使用FileUpload控件)代碼:
protected void btnGetFile_click(object sender, EventArgs e)
{
if (this.FileUpload1.HasFile)
{
this.FileUpload1.SaveAs(Server.MapPath("~/temp/") + this.FileUpload1.FileName);
ImportFromExcel(Server.MapPath("~/temp/") + this.FileUpload1.FileName);
}
}
這是我使用的讀取文件並執行代碼BULK INSERT:
public void ImportFromExcel(string excelFilePath)
{
// Get connection string to database from web.config
string strConnDB = ConfigurationManager.ConnectionStrings["strConnectToDB"].ConnectionString;
// Connection string for selected Excel file
string strConnExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFilePath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
string strExcelBatchQuery = "select LabBatch from [LabBatch$]";
OleDbConnection connExcel = new OleDbConnection(strConnExcel);
connExcel.Open();
OleDbCommand cmdExcel = new OleDbCommand(strExcelBatchQuery, connExcel);
OleDbDataReader rdrExcel = cmdExcel.ExecuteReader();
SqlBulkCopy bulkCopy = new SqlBulkCopy(strConnDB);
bulkCopy.DestinationTableName = "_trasher_excel_batch";
while (rdrExcel.Read())
{
bulkCopy.WriteToServer(rdrExcel);
}
connExcel.Close();
}
但當我嘗試這個代碼,我得到的錯誤,「System.Data.OleDb.OleDbException:沒有爲一個或多個必需的參數給定值。」在這條線上:
OleDbDataReader rdrExcel = cmdExcel.ExecuteReader();
我已經看遍了所有,但這似乎是正確的語法。即使是MSDN entry說這是正確的。
該表存在於我的數據庫中,並且我已經檢查了表,工作表和字段名稱。電子表格中沒有空值(對Stackoverflow上的類似帖子的一些回覆表示可能是問題)。
任何幫助?謝謝。
謝謝您的答覆,但我不明白......在SQL語句,在Excel工作簿的標籤是LabBatch $和我想要的字段是LabBatch。你能給我一個正確格式的SQL字符串的例子嗎? – Stanton
抱歉,遲到的回覆。現在我更仔細地看,你的SQL看起來很好。你似乎確定工作表名稱是正確的。也許列舉工作表名稱將會有所幫助。我編輯了將執行枚舉的答案。我希望這有助於幫助 –
羅恩,再次感謝幫助我。在你第一次回覆之後,我修改了我的SQL,發現SELECT *有效,但是指定的字段沒有 - 不知道爲什麼。但是我已經開發了一種使用這種方法的解決方法。 – Stanton