C# 使用C将文本文件导入SQL Server数据库#
我正在尝试将文本文件导入sql server数据库,导入工作正常,但问题是文本文件中的所有列都被插入到一列中。 我需要文本文件中的列来映射sql表中的列。 这是我的密码C# 使用C将文本文件导入SQL Server数据库#,c#,asp.net,C#,Asp.net,我正在尝试将文本文件导入sql server数据库,导入工作正常,但问题是文本文件中的所有列都被插入到一列中。 我需要文本文件中的列来映射sql表中的列。 这是我的密码 Console.WriteLine(s); string fileName = s.ToString(); string fullPath = path + fileName.ToString(); DataTable dt = new DataTable();
Console.WriteLine(s);
string fileName = s.ToString();
string fullPath = path + fileName.ToString();
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Environment", typeof(string)),
new DataColumn("Job_Name", typeof(string)),
new DataColumn("Occurs",typeof(string)) });
string csvData = File.ReadAllText(fullPath);
foreach (string row in csvData.Split('\n'))
{
if (!string.IsNullOrEmpty(row))
{
dt.Rows.Add();
int i = 0;
foreach (string cell in row.Split(','))
{
dt.Rows[dt.Rows.Count - 1][i] = cell;
i++;
}
}
}
string consString = ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
using (SqlConnection con = new SqlConnection(consString))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
//Set the database table name
sqlBulkCopy.DestinationTableName = "[dbo].[test2]";
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
}
}
当数据以制表符分隔时,您正在以逗号分隔行。而是这样做:
row.Split('\t')
另外,不要在\n
上拆分整个文件,请使用文件.ReadAllLines
,例如:
foreach (string row in File.ReadAllLines(fullPath))
{
if (!string.IsNullOrEmpty(row))
{
dt.Rows.Add();
int i = 0;
foreach (string cell in row.Split('\t'))
{
dt.Rows[dt.Rows.Count - 1][i] = cell;
i++;
}
}
}
在c#函数下面,将逗号分隔的文件导入c#数据表。将数据输入dataTable后,您可以应用所需的方法(批量插入/逐行插入)来接收数据库:
public static DataTable ImportDataFromCSVFile(string filePath)
{
DataTable dataTable = new DataTable();
try
{
using (StreamReader readFile = new StreamReader(filePath))
{
string line;
StringBuilder sb = new StringBuilder();
string[] row;
int counter = 0;
int length = 0;
while ((line = readFile.ReadLine()) != null)
{
row = line.Split(',');
if (counter == 0)
{
length = row.Length;
DataRow dr1 = dataTable.NewRow();
for (int i = 0; i < length; i++)
{
try
{
//dataTable.Columns.Add("Col_" + i.ToString());
dataTable.Columns.Add(Convert.ToString(row[i]));
}
catch (Exception ex)
{
}
}
// dataTable.Rows.Add(dr1);
}
else
{
if (row.Length == dataTable.Columns.Count)
{
DataRow dr = dataTable.NewRow();
for (int i = 0; i < length; i++)
{
if (row[i].ToString().Contains('"'))
{
row[i] = row[i].Replace('"', ' ');
}
dr[i] = Convert.ToString(row[i]);
}
dataTable.Rows.Add(dr);
}
else
{
}
}
counter++;
}
}
}
catch (Exception ex)
{
}
return dataTable;
}
公共静态数据表ImportDataFromCSVFile(字符串文件路径)
{
DataTable=新的DataTable();
尝试
{
使用(StreamReader readFile=newstreamreader(filePath))
{
弦线;
StringBuilder sb=新的StringBuilder();
字符串[]行;
int计数器=0;
整数长度=0;
而((line=readFile.ReadLine())!=null)
{
行=行。拆分(',');
如果(计数器==0)
{
长度=行长度;
DataRow dr1=dataTable.NewRow();
for(int i=0;i
那么row.Split(“,”)返回的究竟是什么呢?迭代实际上是在第一个循环中发生的吗?我猜您正在使用的行终止符没有被正确解析,因此您可以将整个文件作为一行读取,然后添加它。我建议您使用file.ReadAllLines
,而不是在\n
上拆分。另外,您确定您的数据是逗号分隔的吗?可能是制表符还是空格?如果是制表符分隔的,为什么要用逗号?执行此操作:row.Split('\t')
。当您已经知道数据没有用逗号标记时,为什么会认为使用逗号进行拆分会有效?不管你是不是新手,这都没有逻辑意义。如果你用一张纸做这件事,同样的逻辑也适用。