将嵌入式csv文件导入SQL Server数据库

时间:2014-04-03 10:12:34

标签: c# sql sql-server csv

我正在研究一些创建新数据库的代码,然后我想要填充一些必需的数据。我编写了一个方法MySqlCommand,它连接到SQL Server并向它发送SQL指令。我编写了下面的代码来检查我是否可以从硬盘上的.csv文件导入所需的数据,这一切都正常:

MySqlCommand("BULK " +
             "INSERT Competition " +
             "FROM 'D:\\Users\\Stephen\\Documents\\Competition.csv'" +
             "WITH (" +
             "FIELDTERMINATOR = ','," +
             "ROWTERMINATOR = '\n')");

现在我已将.csv文件添加为Visual Studio项目中的嵌入式资源,我希望从那里将数据导入数据库。我已经发现我可以使用以下方法访问嵌入式资源:

var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("Competition.csv");

我现在陷入困境,因为我不知道如何允许SQL Server访问嵌入式资源数据,我怀疑我需要采用不同的方法。我将不胜感激。

2 个答案:

答案 0 :(得分:0)

我有一个类似的项目,

我所做的是将项目添加到数据表并给出严格的值。

然后我循环遍历每一行并插入它,

这花了很长时间。

我无法进行批量插入的原因是因为csv在我的本地机器上而且sql server在另一个远程位置。

如果你的机器上有sql,那么insert命令看起来像这样,

BULK
INSERT myCSVFile
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

答案 1 :(得分:0)

好的,所以我找到了一种方法来做到这一点,并认为我会发布答案来帮助其他人:

using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BetfairDatabaseMDI.embeddedResources.Competition.csv"))
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        while (!reader.EndOfStream)
                        {
                            string result = reader.ReadLine();
                            result = "'" + result + "'";
                            result = result.Replace(",", "','");

                            MySqlCommand("INSERT INTO Competition " +
                                        "VALUES (" + result + ")");
                        }
                    }
                }

我的想法是逐行读取嵌入式资源并发送指令以将每行添加到SQL表1中。我猜它不如使用批量插入的方法那样有效但是它的一次性命令所以在我的情况下不是问题。