Asp.net mvc 3 csv到数据库c#
我相信以下代码可以使用以下格式将csv文件上载到数据库: csv格式: 约翰·安德森,mAsp.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格式
/// <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文件