C# Winform实现点击"汇入"按钮弹出浏览文件夹,选择某个csv文件确定后执行获取csv所有内容并将其防重insert进pg数据库A表,请提供完整代码
时间: 2024-11-24 19:40:09 浏览: 24
在C# Winform应用程序中,你可以通过事件驱动的方式实现这个功能。首先,你需要创建一个`BrowseFiles`函数用于弹出文件浏览器,然后处理`Click`事件来读取CSV文件的内容,并防止重复插入到数据库。以下是一个简单的示例:
```csharp
using System;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;
public partial class MainForm : Form
{
private string connectionString = "your_connection_string_to_pg_database"; // 替换为你的PostgreSQL连接字符串
public MainForm()
{
InitializeComponent();
}
private void browseButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "CSV Files (*.csv)|*.csv";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string csvFilePath = openFileDialog.FileName;
InsertCSVContent(csvFilePath);
}
}
private void InsertCSVContent(string filePath)
{
try
{
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// 假设表结构中有unique_id字段用于去重
int uniqueId = GetUniqueIdFromLine(line); // 这里需要实现从CSV行提取唯一ID
if (!CheckDuplicate(uniqueId)) // 检查是否已存在,可以使用SqlCommand来执行SQL查询
{
InsertIntoDatabase(line);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show($"Error occurred: {ex.Message}");
}
}
private bool CheckDuplicate(int id)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM A WHERE unique_id = @id", connection);
command.Parameters.AddWithValue("@id", id);
connection.Open();
return (int)command.ExecuteScalar() > 0;
}
}
private void InsertIntoDatabase(string data)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand($"INSERT INTO A (data_column) VALUES (@data)", connection);
command.Parameters.AddWithValue("@data", data);
connection.Open();
command.ExecuteNonQuery();
}
}
// 示例中的GetUniqueIdFromLine方法需要你自己实现,通常会依赖于CSV数据的具体格式
private int GetUniqueIdFromLine(string line)
{
// 这部分取决于CSV文件中的实际结构,例如如果有一个名为unique_id的列,你可以直接返回它的值
// int uniqueId = Convert.ToInt32(line.Split(',')[0]); // 假设第一列是唯一标识
// 实际操作中可能需要解析CSV、提取指定字段等步骤
throw new NotImplementedException();
}
}
阅读全文