![](/img/trans.png)
[英]Bulkcopy data from CSV file to PostgreSQL database using C#
[英]Import Text File data to PostgreSQL database using C#
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 是一個逗號分隔的字段名稱列表。 其他變量應該(我希望)是不言自明的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.