首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将csv文件读取到数据表并传递到存储过程

将csv文件读取到数据表并传递到存储过程
EN

Stack Overflow用户
提问于 2018-12-14 04:34:01
回答 1查看 843关注 0票数 0

我有一个包含80+列和3000+行的csv文件。我的列都在标题(name1name2name3name4)中,这很好。我的错误是它没有计算我的所有行,并将其添加到数据库中。我希望我的流阅读器或任何其他推荐的头跳过第一条记录,因为它充满了列名。然后添加数据行。

代码语言:javascript
复制
using (StreamReader sr = new StreamReader(filename))
            {
                //this assume the first record is filled with the column names

                    string[] headers = sr.ReadLine().Split(',');
                    foreach (string header in headers)
                    {
                        tvp.Columns.Add(header);
                    }
                    while (!sr.EndOfStream)
                    {
                        string[] rows = sr.ReadLine().Split(',');
                        //Create a new row
                        DataRow dr = tvp.NewRow();
                        for (int i = 0; i < headers.Length; i++)
                        {
                            dr[i] = rows[i];
                        }
                        tvp.Rows.Add(dr);
                       // Console.WriteLine(tvp);
                    }               
            }

            //Passing a Table-Valued Parameter to a Stored Procedure
            using (SqlConnection con = new SqlConnection(Connectionstring))
            {
                con.Open();
                //Execute the cmd
                // Configure the command and sql parameter. 
                SqlCommand cmd = new SqlCommand("dbo.DataTable", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandTimeout = 5000;

                // Create a DataTable with the modified rows.  
                DataTable addedCategories = tvp.GetChanges(DataRowState.Added);
                // these next lines are important to map the C# DataTable object to the correct SQL User Defined Type
                SqlParameter tvparam = cmd.Parameters.AddWithValue("@dt", tvp);
                tvparam.SqlDbType = SqlDbType.Structured;
                tvparam.TypeName = "dbo.DataTableType";
                //SqlParameter parameter = new SqlParameter("@dt", SqlDbType.Structured)
                cmd.Parameters.AddWithValue("@fy", drlFY.SelectedValue);
                cmd.Parameters.AddWithValue("@offid", drlOfficeID.SelectedValue);
                cmd.Parameters.AddWithValue("@updateBy", "9999");
                cmd.Parameters.AddWithValue("@sourcefile", strSrcFile);

                // Execute the command
                cmd.ExecuteNonQuery();
                con.Close();
EN

回答 1

Stack Overflow用户

发布于 2018-12-14 05:40:13

我不清楚您对从CSV文件导入数据的具体要求,但批量导入是您的一个选项。请访问:https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-bulk-data-by-using-bulk-insert-or-openrowset-bulk-sql-server?view=sql-server-2017

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53769662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档