【发布时间】:2016-01-17 06:33:44
【问题描述】:
我需要将数据从文本文件/csv 文件加载到 SQL Server 数据库。我使用下面显示的代码来加载数据并正在加载到数据库中,问题是第二列中的数据可能包含空格,但我使用空格来分隔列数据。
即
200007 XXXX Check XXXX yyy 50
200013 YYYY Check ZZZZ yyy 50
200022 nnnn 25Mg 30 Tabs
200042 mmmm 30 Mg 30 Tabs
我需要将第一个 ID 号存储在第一列,将剩余的文本存储在第二列:
string str = Properties.Settings.Default.con;
SqlConnection con = new SqlConnection(str);
SqlCommand cmd = new SqlCommand();
try
{
cmd.Connection = con;
con.Open();
cmd.CommandText = "IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='TEMP_AUTO' AND xtype='U')" +
"CREATE TABLE TEMP_AUTO (" +
"ID varChar(10) NULL," +
"NAME varChar(50) NULL," +
"DATE TIMESTAMP NULL," +
")";
cmd.ExecuteNonQuery();
string query1 = "INSERT INTO [dbo].[TEMP_AUTO]([ID],[NAME]) VALUES (@num1, @num2)";
cmd.CommandText = query1;
string[] allLines = File.ReadAllLines(txtFilePath.Text);
for (int i = 0; i < allLines.Length; i++)
{
cmd.Parameters.Clear();
string[] items = allLines[i].Split(new char[] { ' ' });
cmd.Parameters.AddWithValue("@num1", items[0]);
cmd.Parameters.AddWithValue("@num2", items[1]);
cmd.ExecuteNonQuery();
}
MessageBox.Show("Successfully saved your data");
}
finally
{
cmd.Dispose();
con.Close();
}
【问题讨论】:
-
如果是CSV文件,值不应该用逗号分隔吗?它只是一个自定义文本文件,正如您的代码中建议的文件扩展名(.text 或 .txt)吗?
-
解决方案是更改创建文本文件的过程以使用另一个分隔符(例如制表符),或者用双引号分隔文本。
-
同意@TT。 - 您的根本问题是您的数据包含您的分隔符,而没有被转义。除非有一些 非常 受限的情况,否则它会变得模棱两可 - 导入时会错误(而且您可能无法检测到它,这会更糟)。首先修复您的生成过程。您应该能够从 C# 触发批量插入 - 您不需要自己编写。
标签: c# sql sql-server csv bulkinsert