private void GetTextFile()
{
NpgsqlConnection npgsqlConnection = new NpgsqlConnection();
npgsqlConnection.ConnectionString = "Server=127.0.0.1;Port=5432;User Id=postgres;Password=rutuparna;Database=Employee";
npgsqlConnection.Open();
NpgsqlCommand command = new NpgsqlCommand("Select * from employee_details", npgsqlConnection);
NpgsqlDataReader dataReader = command.ExecuteReader();
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(@"D:\Rutu\txtfile.txt", false, Encoding.UTF8))
{
while (dataReader.Read())
{
writer.WriteLine(dataReader[0] + "; " + dataReader[1] + ";" + dataReader[2] + ";" + dataReader[3]);
}
}
MessageBox.Show("Data fetched Properly");
}
这里我已经完成了如何将数据转换为文本文件。
有人可以告诉我如何使用C#将文本文件数据导出到SQL数据库的代码吗?
为什么没有这样的东西
using (SqlConnection con = new SqlConnection(@"your connection string"))
{
con.Open();
using(StreamReader file = new StreamReader(@"D:\Rutu\txtfile.txt"))
{
while((line = file.ReadLine()) != null)
{
string[] fields = line.Split(',');
SqlCommand cmd = new SqlCommand("INSERT INTO employee_details(column1, column2, column3,column4) VALUES (@value1, @value2, @value3, @value4)", con);
cmd.Parameters.AddWithValue("@value1", fields[0].ToString());
cmd.Parameters.AddWithValue("@value2", fields[1].ToString());
cmd.Parameters.AddWithValue("@value3", fields[2].ToString());
cmd.Parameters.AddWithValue("@value4", fields[3].ToString());
cmd.ExecuteNonQuery();
}
}
}
我不知道您的列的名称,因此您需要替换它们。
如果考虑速度(恕我直言,它应该一直如此),而您正在使用PostgreSQL
(您似乎应该使用),那么您应该看看COPY功能。单刀片总是比批量操作慢。
将COPY
函数包装在c#中相对容易。以下是方法的简化版本,以说明这一点。我的方法遍历DataTable
的行,但是很容易适应文件情况(ReadLine()
等)。
using (var pgConn = new NpgsqlConnection(myPgConnStr))
{
using (var writer = pgConn.BeginBinaryImport("COPY " + destinationTableName + " (" + commaSepFieldNames + ") FROM STDIN (FORMAT BINARY)"))
{
//Loop through data
for (int i = 0; i < endNo; i++)
{
writer.StartRow();
//inner loop through fields
for (int j = 0; j < fieldNo; j++)
{
//test for null
if (true)
{
writer.WriteNull();
}
else
{
//Write data using column types
writer.Write(value, type);
}
}
}
writer.Complete();
}
}
WriteNull()
是一种将NULL
正确添加到流中的特殊方法,否则请使用Write<T>()
。后者具有三个重载,仅是值,具有枚举类型的值或具有名称类型的值。我更喜欢使用枚举。 commaSepFieldNames是逗号分隔的字段名称列表。 (我希望)其他变量不言自明。