使用SqlBulkCopy插入变量和列

时间:2017-08-21 18:24:39

标签: c# sql-server datagridview sqlbulkcopy

我正在学习并编写此代码以将数据从一个数据库复制到另一个数据库(LOTSCON)=来源,CON =目的地。

代码全部工作并复制数据,但它基于以前的datagridview表单上的复选框。

用户选择要导入的记录,但也选择CHKCOMMUNITY,这意味着该患者是疗养院患者。

在NEW表格中,有一个列nursinghome,它是一个位类型。

如果用户在数据网格中勾选chkCommunity,我想进行批量复制,但也要确保目标表中的nursinghome列设置为1。

所以我没有映射源表中的现有列。

我怎样才能做到这一点?

我是否只是导入然后运行一个SQL字符串,根据我刚刚输入的内容更新列?

foreach (DataGridViewRow row in dataGridInst.Rows) 
{
    DataGridViewCheckBoxCell chkcell = row.Cells["chkimport"] as DataGridViewCheckBoxCell;

    if (chkcell.Value != null)
    {             
        if (Convert.ToBoolean(chkcell.Value) == true)
        {
            instid = Convert.ToInt32(row.Cells["clninstid"].Value);
            iscommunity = Convert.ToInt32(row.Cells["chkcommunity"].Value);

            using (SqlConnection lotscon = new SqlConnection(ConfigurationManager.ConnectionStrings["LOTSConnectionString"].ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand(@"SELECT Person.*, NEWinstitution.institutionname
                                    FROM NEWinstitution INNER JOIN Person ON NEWinstitution.institutionid = Person.InstitutionID
                                    WHERE person.institutionid = @instid", lotscon))
                {
                    cmd.Parameters.Add("@instid", SqlDbType.Int).Value = instid;

                    using (SqlDataAdapter adapt = new SqlDataAdapter())
                    { 
                        adapt.SelectCommand = cmd;
                        lotscon.Open();

                        DataSet ds = new DataSet();
                        adapt.Fill(ds);

                        DataTable dtgenerate = new DataTable();
                        dtgenerate = ds.Tables[0];

                        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString))
                        {
                            using (SqlBulkCopy bc = new SqlBulkCopy(con))
                            {
                                bc.DestinationTableName = "tblpatient";

                                bc.ColumnMappings.Add("firstname", "pxfirstname");
                                bc.ColumnMappings.Add("lastname", "pxlastname");
                                bc.ColumnMappings.Add("address", "address");
                                bc.ColumnMappings.Add("suburb", "suburb");
                                bc.ColumnMappings.Add("medicareno", "medicarenumber");
                                bc.ColumnMappings.Add("personid", "dispenseid");
                                bc.ColumnMappings.Add("institutionname", "institutionname");
                                bc.ColumnMappings.Add("VAcardid", "repatnumber");
                                bc.ColumnMappings.Add("phonenumber", "phonenumber");

                                con.Open();
                                bc.WriteToServer(dtgenerate);
                                con.Close();
                                lotscon.Close();
                            }
                        }
                    }
                }
            }
        }
    }
}

0 个答案:

没有答案