循环文件夹获取并逐个将doc文件插入sql db

时间:2017-09-28 05:48:41

标签: c# sql-server

我需要帮助。我必须使用c#将doc文件插入mssql及其文件夹名称。以下是一些示例目录:

\ gpvmsrv01 \ INPUT \ Scan \ Patent \ 2017 \ 2 \ I AP 20170115 \ Formula \ 1.doc \ gpvmsrv01 \ INPUT \ Scan \ Patent \ 2016 \ 1 \ I AP 20160248 \ Description \ 2_u.doc ....

\ gpvmsrv01 \ INPUT \ Scan \ Patent \是不可更改的根文件夹。但是其他文件夹可以循环播放。 文件数量超过千件。

表名:专利

[app_number] [int] NOT NULL,
[type] [nchar](20) NULL,
[filename] [nchar](10) NULL,
[data] [varbinary](max) NULL,

我应该遍历所有目录。

这是我的第一行值

app_number=20170115
type=Formula
filename=1
data=1.doc file

我的第二行值

app_number=20160248
type=Description
filename=2_u
data=2_u.doc file

如果有人帮我提供一些示例代码,我会非常感激的。

1 个答案:

答案 0 :(得分:0)

正如佐哈尔在评论中指出的那样,这个问题过于宽泛,因为它涉及多个问题:

  1. 文件发现。
  2. 解析路径以找出参数
  3. 用于更新目标表的数据库交互。
  4. 我假设你不知道从哪里开始,所以我会抛出一个代码示例来帮助你入门:

    left

    根据文件夹的安全权限,您可能希望以管理员身份运行此代码。否则static void Main(string[] args) { const string baseFolder = "\\gpvmsrv01\\INPUT\\Scan\\Patent\\"; const string query = "INSERT INTO Patent([app_number], [type], [filename], [data]) " + "VALUES ({0}, {1}, {2}, {3})" ; var fileList = Directory .EnumerateFiles(baseFolder, "*", SearchOption.AllDirectories) .ToArray() ; using (var conn = new SqlConnection("your connection string goes here")) using (var cmd = conn.CreateCommand()) { foreach (var fileX in fileList) { var parts = fileX.Substring(baseFolder.Length).Split('\\'); // extract only the number var appNum = Regex.Replace(parts[2], "[^0-9]", string.Empty); var typ = parts[3]; var fn = parts[4]; var contents = File.ReadAllBytes(fileX); cmd.CommandText = string.Format(query, appNum, typ, fn, contents) + Environment.NewLine; } cmd.ExecuteNonQuery(); } } 是预期的。