Asp.net mvc 3 csv到数据库c#

Asp.net mvc 3 csv到数据库c#,asp.net-mvc-3,Asp.net Mvc 3,我相信以下代码可以使用以下格式将csv文件上载到数据库: csv格式: 约翰·安德森,m 它将用insert语句记录到TableRef表格(完成) 需要根据csv中的列表记录数在BulkImportDetails中插入custId和RefId。目前它只插入1条记录 表1:TableRef(guid refid(主键,非空)、任务名、任务描述) 表2:BulkImportDetails(guid custid(pk,非空)、guid refid(fk,非空、名字、姓氏、年龄) 如何将基于csv格式

我相信以下代码可以使用以下格式将csv文件上载到数据库:

csv格式:

约翰·安德森,m

  • 它将用insert语句记录到TableRef表格(完成)
  • 需要根据csv中的列表记录数在BulkImportDetails中插入custId和RefId。目前它只插入1条记录
  • 表1:TableRef(guid refid(主键,非空)、任务名、任务描述) 表2:BulkImportDetails(guid custid(pk,非空)、guid refid(fk,非空、名字、姓氏、年龄)

    如何将基于csv格式的信息插入两个表,请告知。谢谢

            /// <summary>
            /// Process the file supplied and process the CSV to a dynamic datatable
            /// </summary>
            /// <param name="fileName">String</param>
            /// <returns>DataTable</returns>
            private static DataTable ProcessCSV(string fileName)
        {
    
            string connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            int AppID = Convert.ToInt32(ConfigurationManager.AppSettings["AppID"]);
            Guid ReferralID = Guid.NewGuid();
            DateTime date = DateTime.Now;
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
    
                using (SqlCommand cmd =
                new SqlCommand("INSERT INTO TestTable VALUES(" +
                    "refid, @ServerID, @AppID, @CreateDate, @CreatedBy, @CreateDescription, @Description)", conn))
                {
                    cmd.Parameters.AddWithValue("@refid", ReferralID);
                    cmd.Parameters.AddWithValue("@ServerID", 2);
                    cmd.Parameters.AddWithValue("@AppID", AppID);
                    cmd.Parameters.AddWithValue("@CreateDate", date);
                    cmd.Parameters.AddWithValue("@CreatedBy", "Create by bulk insert");
                    cmd.Parameters.AddWithValue("@CreateDescription", "Create by bulk insert");
                    cmd.Parameters.AddWithValue("@Description", "Create by bulk insert");
    
    
                    int rows = cmd.ExecuteNonQuery();
    
                    //rows number of record got inserted
                }
    
    
            }
    
            //Set up our variables 
            string Feedback = string.Empty;
            string line = string.Empty;
            string[] strArray;
            DataTable dt = new DataTable();
    
            DataRow row;
    
            // work out where we should split on comma, but not in a sentance
            Regex r = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
    
            //Set the filename in to our stream
            StreamReader sr = new StreamReader(fileName);
    
            //Read the first line and split the string at , with our regular express in to an array
            line = sr.ReadLine();
            strArray = r.Split(line);
    
            //For each item in the new split array, dynamically builds our Data columns. Save us having to worry about it.
    
            Array.ForEach(strArray, s => dt.Columns.Add(new DataColumn()));
            dt.Columns.Add("CustID", Type.GetType("System.Guid"));
            dt.Columns.Add("Refid", Type.GetType("System.Guid"));
            dt.Columns["CustID"].SetOrdinal(3);
            dt.Columns["Refid"].SetOrdinal(4);
            //Read each line in the CVS file until it's empty
            while ((line = sr.ReadLine()) != null)
            {
                row = dt.NewRow();
    
                //add our current value to our data row
                row["CustID"] = Guid.NewGuid();
                row["Refid"] = ReferralID;
    
                row.ItemArray = r.Split(line);
                dt.Rows.Add(row);
            }
            dt.Columns["CustID"].SetOrdinal(0);
    
            dt.Columns["Refid"].SetOrdinal(1);
            //Tidy Streameader up
            sr.Dispose();
    
            //return a the new DataTable
            return dt;
    
    
        }
    
    
    
    
            /// <summary>
            /// Take the DataTable and using WriteToServer(DataTable) send it all to the database table "BulkImportDetails" in one go
            /// </summary>
            /// <param name="dt">DataTable</param>
            /// <returns>String</returns>
            private static String ProcessBulkCopy(DataTable dt)
            {
                string Feedback = string.Empty;
                string connString = ConfigurationManager.ConnectionStrings["DataBaseConnectionString"].ConnectionString;
    
                //make our connection and dispose at the end    
                using(  SqlConnection conn = new SqlConnection(connString))
                {
                    //make our command and dispose at the end
                    using (var copy = new SqlBulkCopy(conn))
                    {
    
                            //Open our connection
                            conn.Open();
    
                            ///Set target table and tell the number of rows
                            copy.DestinationTableName = "BulkImportDetails";
                            copy.BatchSize = dt.Rows.Count;
                            try
                            {
                                //Send it to the server
                                copy.WriteToServer(dt);
                                Feedback = "Upload complete";
                            }
                            catch (Exception ex)
                            {
                                Feedback = ex.Message;
                            }
                    }
                }
    
                return Feedback;
           }
    
    //
    ///处理提供的文件并将CSV处理为动态数据表
    /// 
    ///串
    ///数据表
    私有静态数据表ProcessCSV(字符串文件名)
    {
    string connString=ConfigurationManager.ConnectionString[“DefaultConnection”].ConnectionString;
    int-AppID=Convert.ToInt32(ConfigurationManager.AppSettings[“AppID”]);
    Guid ReferralID=Guid.NewGuid();
    DateTime date=DateTime.Now;
    使用(SqlConnection conn=newsqlconnection(connString))
    {
    conn.Open();
    使用(sqlcmd)命令=
    新的SqlCommand(“插入到TestTable值(”+
    “refid、@ServerID、@AppID、@CreateDate、@CreatedBy、@CreateDescription、@Description)”,康涅狄格州)
    {
    cmd.Parameters.AddWithValue(“@refid”,ReferralID);
    cmd.Parameters.AddWithValue(“@ServerID”,2);
    cmd.Parameters.AddWithValue(“@AppID”,AppID);
    cmd.Parameters.AddWithValue(“@CreateDate”,date);
    cmd.Parameters.AddWithValue(“@CreatedBy”,“通过批量插入创建”);
    cmd.Parameters.AddWithValue(“@CreateDescription”,“通过批量插入创建”);
    cmd.Parameters.AddWithValue(“@Description”,“通过批量插入创建”);
    int rows=cmd.ExecuteNonQuery();
    //已插入记录的行数
    }
    }
    //设置我们的变量
    字符串反馈=string.Empty;
    string line=string.Empty;
    字符串[]strArray;
    DataTable dt=新的DataTable();
    数据行;
    //找出我们应该用逗号分开的地方,但不要用句号
    正则表达式r=新正则表达式(“,(?=(?:[^\“]*\”[^\“]*\”*(?![^\“]*\”));
    //在我们的流中设置文件名
    StreamReader sr=新的StreamReader(文件名);
    //读取第一行并在处拆分字符串,并将正则表达式放入数组中
    line=sr.ReadLine();
    strArray=r.Split(直线);
    //对于新拆分数组中的每个项目,动态构建数据列。省去我们的顾虑。
    ForEach(strArray,s=>dt.Columns.Add(newdatacolumn());
    Add(“CustID”,Type.GetType(“System.Guid”);
    Add(“Refid”,Type.GetType(“System.Guid”);
    dt.列[“CustID”]。SetOrdinal(3);
    dt.列[“Refid”]。设置序号(4);
    //读取CVS文件中的每一行,直到其为空
    而((line=sr.ReadLine())!=null)
    {
    row=dt.NewRow();
    //将当前值添加到数据行
    行[“CustID”]=Guid.NewGuid();
    行[“Refid”]=ReferralID;
    row.ItemArray=r.Split(行);
    dt.行。添加(行);
    }
    dt.列[“CustID”].SetOrdinal(0);
    dt.列[“Refid”]。设置序号(1);
    //整理拖缆机
    高级处置();
    //返回一个新的数据表
    返回dt;
    }
    /// 
    ///获取DataTable并使用WriteToServer(DataTable)一次性将其全部发送到数据库表“BulkImportDetails”
    /// 
    ///数据表
    ///串
    私有静态字符串ProcessBulkCopy(数据表dt)
    {
    字符串反馈=string.Empty;
    string connString=ConfigurationManager.ConnectionString[“DataBaseConnectionString”]。ConnectionString;
    //建立我们的连接并在最后处理
    使用(SqlConnection conn=newsqlconnection(connString))
    {
    //让我们的命令和处置在最后
    使用(var copy=new SqlBulkCopy(conn))
    {
    //打开我们的连接
    conn.Open();
    ///设置目标表并告诉行数
    copy.DestinationTableName=“BulkImportDetails”;
    copy.BatchSize=dt.Rows.Count;
    尝试
    {
    //将其发送到服务器
    copy.WriteToServer(dt);
    反馈=“上传完成”;
    }
    捕获(例外情况除外)
    {
    反馈=例如消息;
    }
    }
    }
    反馈;
    }
    
    我修改代码如下:

    为什么不使用SQL Management Studio?它包含导入csv文件的向导。您好,Zippy,谢谢您的回复。但我需要从应用程序上载csv文件