繁体   English   中英

将嵌入式的CSV文件导入到SQL Server数据库

[英]Import embedded csv file to a SQL Server database

我正在使用一些代码来创建一个新数据库,然后用一些必需的数据填充该数据库。 我已经编写了一个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访问嵌入式资源数据,我怀疑我需要以不同的方式进行处理。 我将不胜感激。

我有一个类似的项目

我所做的就是将项目添加到数据表中,并赋予它严格的值。

然后我遍历每一行并将其插入,

这花了很长时间。

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

如果您的计算机上有sql,则insert命令如下所示:

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

好的,因此我想出了一种方法来做,并认为我会发布答案以帮助他人:

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 + ")");
                        }
                    }
                }

我的想法是逐行读取嵌入的资源,并发送指令以1乘1的方式将每一行添加到SQL表。我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM