C# 使用Asp.net C中的文件上载将特定字段从.csv导入SQL Server L#

C# 使用Asp.net C中的文件上载将特定字段从.csv导入SQL Server L#,c#,asp.net,.net,c#-4.0,csv,C#,Asp.net,.net,C# 4.0,Csv,有20列的csv文件,我使用FileUpload控件上传了它,现在我只想在数据库中添加这20列中的一列数据,我如何实现这一点。。 我的代码是- DataTable tblReadCSV = new DataTable(); tblReadCSV.Columns.Add("EmailId"); string path = System.IO.Path.GetFileName(fupEmails.PostedFile.FileName); fupEmails.Post

有20列的csv文件,我使用FileUpload控件上传了它,现在我只想在数据库中添加这20列中的一列数据,我如何实现这一点。。 我的代码是-

    DataTable tblReadCSV = new DataTable();
    tblReadCSV.Columns.Add("EmailId");
    string path = System.IO.Path.GetFileName(fupEmails.PostedFile.FileName);
    fupEmails.PostedFile.SaveAs(Server.MapPath("~/Contacts/" + path));
    path = Server.MapPath("~/Contacts/" + path);
    TextFieldParser csvParser = new TextFieldParser(path);
    csvParser.Delimiters = new string[] { "," };
    csvParser.TrimWhiteSpace = true;
    //csvParser.ReadLine();
    while (!csvParser.EndOfData)
    {
        string[] fields = csvParser.ReadFields();
        tblReadCSV.Rows.Add(fields.);
    }
    string connection = @"Data Source=ANURAG-PC; Initial Catalog=MailServer; Persist Security Info=True; User ID=xx; Password=xxxxxx";
    string strSql = "Insert into EmailData(EmailId) Values(@Email)";
    SqlConnection con=new SqlConnection(connection);
    SqlCommand cmd=new SqlCommand();
    cmd.CommandType=CommandType.Text;
    cmd.CommandText=strSql;
    cmd.Connection=con;
    cmd.Parameters.Add("@Email",SqlDbType.NVarChar,250,"EmailId");
    SqlDataAdapter daAdapter=new SqlDataAdapter();
    daAdapter.InsertCommand=cmd;
    int result=daAdapter.Update(tblReadCSV);
    lblError.Text="Send Successfully";
问题在于这三条线——

while (!csvParser.EndOfData)
{
    string[] fields = csvParser.ReadFields();
    tblReadCSV.Rows.Add(fields.Equals("Email");
}

这里的字段包含所有的列标题,所以我只需要整个字段中的一个字段电子邮件,如何实现这一点,上面的行不适用于此。

您需要创建一个与数据表架构匹配的
DataRow
,然后将解析的CSV值行中的正确值插入该行,然后将该行添加到
数据表
。大致如下

while (!csvParser.EndOfData)
{
    var fields = csvParser.ReadFields();
    var row = tblReadCSV.NewRow();
    row["EmailId"] = fields[ordinalPositionOfEmailField];
    tblReadCSV.Rows.Add(row)
}

在while循环之前放置以下行

var FirstRowfields = csvParser.ReadFields();
while(!csvParser.EndOfData)
{
  //your code
}

这将读取第一行,然后启动循环将从第二行开始读取,这样您就不会在列中添加标题

我认为在internet上发布(在连接字符串中)您的用户名和密码是不明智的。即使是这样。我已经“x”了。非常感谢您的建议,但它与我以前的代码相同,它还添加了第一行,即csv文件中列的标题,我不需要第一行。您以前的代码无法编译。你也可以在进入循环之前通过阅读一次跳过第一行。。。