在C#中使用> 255列的SQL Csv的有效方法是使用SQL Server的BULK INSERT命令。BULK INSERT命令可以将CSV文件的数据快速导入到SQL Server表中。
以下是使用BULK INSERT命令的步骤:
下面是一个示例代码:
using System;
using System.Data.SqlClient;
using System.IO;
using System.Text;
public class CsvImporter
{
public void ImportCsv(string csvFilePath, string connectionString)
{
// 创建临时表
string createTableSql = "CREATE TABLE #TempTable (Column1 VARCHAR(MAX), Column2 VARCHAR(MAX), ...)";
// 读取CSV文件内容
string[] lines = File.ReadAllLines(csvFilePath);
// 构建INSERT语句
StringBuilder insertSqlBuilder = new StringBuilder();
insertSqlBuilder.AppendLine("INSERT INTO #TempTable (Column1, Column2, ...) VALUES");
foreach (string line in lines)
{
string[] fields = line.Split(',');
insertSqlBuilder.AppendLine($"('{fields[0]}', '{fields[1]}', ...),");
}
string insertSql = insertSqlBuilder.ToString().TrimEnd(',') + ";";
// 连接到数据库并执行INSERT语句
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(createTableSql, connection))
{
command.ExecuteNonQuery();
}
using (SqlCommand command = new SqlCommand(insertSql, connection))
{
command.ExecuteNonQuery();
}
// 使用MERGE语句将临时表中的数据合并到目标表中
string mergeSql = "MERGE INTO TargetTable AS T USING #TempTable AS S ON T.PrimaryKey = S.PrimaryKey WHEN MATCHED THEN UPDATE SET T.Column1 = S.Column1, T.Column2 = S.Column2, ... WHEN NOT MATCHED THEN INSERT (Column1, Column2, ...) VALUES (S.Column1, S.Column2, ...);";
using (SqlCommand command = new SqlCommand(mergeSql, connection))
{
command.ExecuteNonQuery();
}
// 删除临时表
string dropTableSql = "DROP TABLE #TempTable;";
using (SqlCommand command = new SqlCommand(dropTableSql, connection))
{
command.ExecuteNonQuery();
}
}
}
}
请注意,上述代码中的"Column1","Column2"等应替换为实际的列名,且临时表和目标表的结构应保持一致。
推荐的腾讯云相关产品是腾讯云数据库SQL Server版(https://cloud.tencent.com/product/sqlserver)和腾讯云云服务器(https://cloud.tencent.com/product/cvm),它们提供了稳定可靠的云计算基础设施和数据库服务,适用于各种规模的应用场景。
领取专属 10元无门槛券
手把手带您无忧上云