1
Excelシートから特定の列をインポートし、SQL Serverテーブルの特定の列に挿入します。ExcelからSQL Serverの特定の列にインポート
以下のコードはデータをテーブルに挿入しません。グリッドビューのデータを正常に表示するがデータを挿入しないので、テーブル全体ではなく1つの列に挿入したいので、
using (SqlConnection con = new SqlConnection(_Conn.ConnStr()))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
//Set the database table name
sqlBulkCopy.DestinationTableName = "dbo.tblPersons";
//Might be a good idea to map excel columns with that of the database table (optional)
sqlBulk.ColumnMappings.Add("Id", "PersonId");
sqlBulk.ColumnMappings.Add("Name", "Name");
con.Open(); // these might be the issue since you need to open..
sqlBulk.WriteToServer(dtExcelData);
con.Close(); // ..and close the connection
}
}
はまた、私はここからオープンとクローズの接続を削除します:
protected void ImportButton_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string Extension = Path.GetExtension(FileUpload1.PostedFile.FileName);
string FolderPath = ConfigurationManager.AppSettings["FolderPath"];
string FilePath = Server.MapPath(FolderPath + FileName);
FileUpload1.SaveAs(FilePath);
Import_To_Grid(FilePath);
}
}
private void Import_To_Grid(string FilePath)
{
string conStr = "";
//switch (Extension)
//{
// case ".xls": //Excel 97-03
// conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"]
// .ConnectionString;
// break;
// case ".xlsx": //Excel 07
// conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"]
// .ConnectionString;
// break;
//}
String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", FilePath);
conStr = String.Format(excelConnString, FilePath);
OleDbConnection connExcel = new OleDbConnection(conStr);
OleDbCommand cmdExcel = new OleDbCommand();
OleDbDataAdapter oda = new OleDbDataAdapter();
DataTable dt = new DataTable();
cmdExcel.Connection = connExcel;
//Get the name of First Sheet
connExcel.Open();
DataTable dtExcelSchema;
dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
connExcel.Close();
//Read Data from First Sheet
connExcel.Open();
cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
oda.SelectCommand = cmdExcel;
oda.Fill(dt);
using (OleDbDataReader dReader = cmdExcel.ExecuteReader())
{
using (SqlBulkCopy sqlBulk = new SqlBulkCopy(_Conn.ConnStr()))
{
//Set your Destination table name
sqlBulk.DestinationTableName = "[AIS].[Inventory].[Inventory_Movments_TBL]";
sqlBulk.WriteToServer(dt);
//Bind Data to GridView
GridView1.Caption = Path.GetFileName(FilePath);
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
connExcel.Close();
}
を私のすべての尊重私のコードでは、別のテーブルの上に罰金働きますPKはちょうど1つの列を持っていません、私はあなたの変更を試みます –