如何仅存储DataGridView中的可用列

时间:2012-07-23 00:36:38

标签: c# sql-server winforms excel datagridview

我有多个列的excel文件,我可以将它导入到C#Win Forms中的DataGridView,以便用户可以查看和编辑数据。 问题是:如何将DataGridView中的数据存储到sql服务器,该服务器只存储数据库中的可用列。 这是快速说明..

database

excel

这是我目前的代码..

    private void buttonImport_Click(object sender, EventArgs e)
    {
        if (openFileDialogExcel.FileName != "Excel File")
        {
            try
            {
                System.Data.OleDb.OleDbConnection MyConnection;
                System.Data.DataSet DtSet;
                System.Data.OleDb.OleDbDataAdapter MyCommand;
                MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='"
                + openFileDialogExcel.FileName + "';Extended Properties=Excel 8.0;");
                MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Data$]", MyConnection);
                MyCommand.TableMappings.Add("Table", "Student");
                DtSet = new System.Data.DataSet();
                MyCommand.Fill(DtSet);
                dataGridView1.DataSource = DtSet.Tables[0];

                MyConnection.Close();
            }
            catch (Exception Fail)
            {
                MessageBox.Show(Fail.ToString());
            }
        }
        else
        {
            MessageBox.Show("Browse 1st");
        }
    }

我有1个用于保存数据的按钮,不包括“性别”列..

private void buttonSave_Click(object sender, EventArgs e)
{
    -----BLANK :(

}

先谢谢..

1 个答案:

答案 0 :(得分:1)

如果您只想在服务器上插入这些数据,最佳方式是使用批量操作......

        using (SqlConnection cn = new SqlConnection(YourConnectionString))
        {
            cn.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(cn))
            {
                bulkCopy.DestinationTableName = "dbo.Student";

                try
                {
                    bulkCopy.ColumnMappings.Add("StudentID", "StudentID");
                    bulkCopy.ColumnMappings.Add("Name", "Name");
                    bulkCopy.ColumnMappings.Add("Address", "Address");

                    // Bulk write on the server
                    bulkCopy.WriteToServer(DtSet.Tables[0]);

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

        }