我在使用 bcp 实用程序将数据导入 azure sql 数据库时遇到问题。
bcp dbo.Account in "D:ABC\Account.csv" -S xxxxx.database.windows.net -U jfsa -P xxxxxx -d dbname -a 4096 -b 50000 -k -E -h "tablock" -q -c -l 120 -t "," -r "0x0d0x0a" -o "D:\Logs\FileLog\account_output.txt" -e "D:\Logs\Error\account_err.txt" -m 100 -F 2
运行命令后没有收到任何错误,但出现以下消息
开始复制...
已复制 0 行。 网络数据包大小(字节):4096 时钟时间(毫秒)总计:1
将 csv 文件恢复到 Azure SQL 数据库中。
您可以使用SQL Server Management Studio将csv文件加载到sql数据库。按照本文档中的步骤操作如何使用 SQL Server Management Studio-discountasp.net 将 CSV 文件导入数据库。
您还可以使用azure数据工厂中的复制活动将csv数据复制到sql数据库中。在复制活动中,将 csv 文件作为源数据集,将 SQL 数据库表作为接收器数据集。
正如@Dai建议的那样,您还可以使用c#并使用
CsvHelper
NuGet库来填充传递到System.Data.DataTable
的SqlBulkCopy
。我使用了这种方法,如下所示。
以下是我遵循的步骤:
连接字符串用于连接Azure SQL数据库。 tableName和csvFilePath用于存储表名称和.csv文件路径。
StreamReader
用于读取 CSV 文件,CsvHelper
用于解析 csv 数据。
CSV 中的每条记录都是 DataClass 的实例。
ToList()
方法用于从 CSV 中读取所有记录。
DataTable
的
dt
以匹配 SQL 表的结构。它根据数据的结构配置列。
SqlBulkCopy
用于将 DataTable
中的数据插入到 Azure SQL 数据库中。
下面是我尝试过的代码:
static void Main(string[] args)
{
string connectionString = "*****";
string tableName = "SampleTable";
string csvFilePath = @"C:\Users\****\Desktop\****\SampleDataFile.csv";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (var reader = new StreamReader(csvFilePath))
using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture)))
{
var records = csv.GetRecords<DataClass>().ToList();
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("FirstName", typeof(string));
dt.Columns.Add("Age", typeof(int));
foreach (var record in records)
{
dt.Rows.Add(record.Id, record.FirstName, record.Age);
}
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = tableName;
bulkCopy.WriteToServer(dt);
}
Console.WriteLine("Data imported successfully.");
}
}
}
数据存储在 CSV 文件中:
输出: