excel导入数据库

时间:2022-10-20 14:52:13

        日常工作中,感觉一些基础知识需要做下笔记,可能是刚毕业的缘故吧,还保持着做笔记的习惯,但根据以往经验,纸质笔记最多保持一年,过后想找已是难过登天。电子版笔记感觉很不错,尤其是发布到网络中。笔记内容是本人遇到的感觉可能会有些用的东西,很是琐碎,记录在博客园中,仅供学习参考。

1、将数据库中的内容显示到一个窗体界面中,此次将它显示到datagrid中。

思路:可以说没有什么思路,很简单。读取数据库中某个表格的内容,将其放到dataset中,然后将其作为datagrid的源即可。

贴代码:

string sqlstr = "server=192.168.100.46;database=PublicProgram;User ID=sa;pwd=typt";
using (SqlConnection sqlconn = new SqlConnection(sqlstr))
            {
                using (SqlCommand sqlcomm = sqlconn.CreateCommand())
                {
                    sqlcomm.CommandText = "select top 3 * from Transcript order by ExamTime desc ";
                    DataSet dt = new DataSet();
                    SqlDataAdapter adapter = new SqlDataAdapter(sqlcomm);
                    adapter.Fill(dt);
                    DataTable ds = dt.Tables[0];
                    this.dataGrid1.ItemsSource = dt.Tables[0].DefaultView;
                }
            }

 

2、获取excel表格中的内容,此次将excel中的内容保存数据库中

思路:获取excel的路径,通过OleDB方式获取excel文件的数据,保存到dataset中。接着可以单个获取dataset中值或者导入到数据库中。

获取excel的路径:

OpenFileDialog openFileDialog = new OpenFileDialog();

            DialogResult result = openFileDialog.ShowDialog();
            if (result ==System.Windows .Forms .DialogResult .Cancel )
            {
                return;
            }
            string fileName = openFileDialog.FileName;
            tbPath.Text = fileName;

通过OleDB方式获取excel文件,并保存到dataset

string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";

            OleDbConnection OleConn = new OleDbConnection(strConn);
            OleConn.Open();
            string sql = string.Format("SELECT * FROM [{0}$]", sheetName);
            OleDbDataAdapter OleDbDAdap = new OleDbDataAdapter(sql, OleConn);
            DataSet ds = new DataSet();
            OleDbDAdap.Fill(ds, sheetName);
            OleConn.Close();

获取dataset后,可以将它存取到数据库中,也可以从其中得到需要的数据信息
存到数据库中:

using (SqlBulkCopy bcp = new SqlBulkCopy(connectionString))
                {
                    //bcp.SqlRowsCopied += new SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
                    bcp.BatchSize = 100; //每次传输的行数
                    bcp.NotifyAfter = 100; //每次提示的行数
                    bcp.DestinationTableName = "[PublicProgram].[dbo].[User]";//目标表
                    bcp.WriteToServer(ds.Tables[0]);
                }

如果获取单个数据,举例简单说明一下:

int length = ds.Tables[0].Rows.Count;
            int len = ds.Tables[0].Columns.Count;
            id = Convert.ToInt32(ds.Tables[0].Rows[length-1][len-2]);
            pwd = Convert.ToInt32(ds.Tables[0].Rows[1][1]);
            for (int i = 0; i < length - 1; i++)
            {
                id = Convert.ToInt32(ds.Tables[0].Rows[i][0]);
                pwd = Convert.ToInt32(ds.Tables[0].Rows[i][1]);
            }


3、wpf设置datagrid的一些属性:

在第一道题中写到了将dataset作为datagrid的数据源,这里仅介绍在wpf中datagrid的一些用法。

改变datagrid的标题行的一些属性:

<DataGrid.ColumnHeaderStyle>
                                <Style TargetType="DataGridColumnHeader">
                                    <Setter Property="Background" Value="black"/>   
                                    <Setter Property="Foreground" Value="white"/>
                                    <Setter Property="FontSize" Value="20" />
                                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                                    <Setter Property="VerticalContentAlignment" Value="Center"/>
                                </Style>
                            </DataGrid.ColumnHeaderStyle>

将标题绑定到一些数据源中,设置其中的内容居中

首先需要将控件设定样式:

<Page.Resources >
        <ResourceDictionary >
            <Style x:Key="dgCell" TargetType="TextBlock">
                <Setter Property="TextAlignment" Value="Center"/>
            </Style >
        </ResourceDictionary >
    </Page.Resources >

然后调用:

<DataGrid.Columns >

  <DataGridTextColumn Header="成绩" Width="50" Binding="{Binding Path=Score}" IsReadOnly="True" ElementStyle="{StaticResource dgCell}"/>
  <DataGridTextColumn Header="项目" Width="50" Binding="{Binding Path=Curriculum}" IsReadOnly="True" ElementStyle="{StaticResource dgCell}"/>

</DataGrid.Columns >

   

笔停此处。继续学习,继续前行。

 

 

/// <summary>
        /// 查询excel电子表格添加到dataset
        /// </summary>
        /// <param name="filenameurl"></param>
        /// <returns></returns>
        public DataSet ExecleDs(string filenameurl)
        {
            string strConn = "Provider=Microsoft.ACE.OleDb.12.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            DataSet ds = new DataSet();
            string strSql = string.Format("SELECT * FROM [{0}$]", "Sheet1");
            OleDbDataAdapter odda = new OleDbDataAdapter(strSql, conn);
            odda.Fill(ds, "hou");
            return ds;
        }