【问题标题】:How to extract part of string from SQL query result using C#如何使用 C# 从 SQL 查询结果中提取部分字符串
【发布时间】:2019-10-10 13:06:37
【问题描述】:

我有以下问题: 我有一个 sql 表(“pathtable”),在其中我将归档的 xml 文件的路径保存在名为“path”的列中。 我现在想从当我使用我在代码中提到的查询时得到的列的路径中的所述文件(“xml1.xml”)中提取文件名(“文件名”)(SELECT path FROM pathtable)。

换句话说,假设在文件夹 xmlfiles (xmlfiles) 中有一个名为“xml1.xml”的文件。并且该文件夹的路径(C:\ Users \ xmlfiles)保存在我的sql表中的“路径”列中。

在一个完美的世界中,我的代码的结果将只是文件名:“xml1”(没有文件扩展名)

感谢您的帮助,问候布赖恩

SqlConnection connection = new SqlConnection(@"Data Source=...\SQLEXPRESS;Initial Catalog=...;Integrated Security=SSPI");
{
    string pathname= "SELECT path FROM pathtable";
    SqlCommand cmd = new SqlCommand(pathname, connection);
    connection.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    string strPath = pathname; //"C:\Users\xmlfiles\"; 
    string filename = null;
    filename = Path.GetFileName(strPath);

    while (reader.Read())
    {
        Console.Write(filename);
    }

   Console.ReadKey();
    reader.Close();
    connection.Close();
}

因为似乎对我想要实现的目标有很多困惑(我的坏:)),所以我尝试以更好的方式解释它: 这是我的 sql 表:SQL Table

在此路径中:“C:\Users\xmlfiles\”有一个名为“testxml.xml”的文件,我希望我的代码返回“testxml”。 还有一个要求是它是硬编码,换句话说,我只能更改我想在我的 sql 表中使用的路径,而不是在 C# 代码中。所以假设我将我的 sql 表从“C:\Users\xmlfiles\”更新为“C:\Users\docfiles\”,那么它应该给我文件夹 docfiles 中的文件名。

我才刚刚开始,感谢您的耐心等待

【问题讨论】:

  • 您的代码看起来有点混乱。您可以获取查询返回的路径inside while 循环如string path = reader.GetString(0); 和不带扩展名的文件名如string file = Path.GetFileNameWithoutExtension(path);
  • 我认为您的代码存在混淆,您的意思是您从 db 获取的路径是“C:\Users\xmlfiles\xml1.xml”吗?

标签: c# sql sql-server filenames


【解决方案1】:

如果你想要不带扩展名的文件名,你可以使用 GetFileNameWithoutExtension 方法:

string strPath = @"C:\Users\xmlfiles\xmlFile.xml"; 
string filename = Path.GetFileNameWithoutExtension(strPath);
Console.WriteLine(filename); // result will be xmlFile

【讨论】:

    【解决方案2】:

    不确定您是在努力从路径解析文件名还是从数据库中读取,所以我已经介绍了两者。

    对于 while 循环的每次迭代,您实际上是从结果集中读取一行。然后,您可以按索引读取该行的每一列值并输入如下:

    while (reader.Read())
    {
        string fileName = reader.GetString(0);
    }
    

    如果您要从表中选择两列,您可能会执行以下操作:

    SELECT path,FILENAME FROM pathtable
    
    while (reader.Read())
    {
            string fileName = reader.GetString(0);
            string filePAth = reader.GetString(1);
    }
    

    如果您将整个路径存储在表中,则可以使用

    解析出文件名

    System.IO.Path.GetFileName(fullPath) 或不带扩展名的文件名 System.IO.Path.GetFileNameWithoutExtension(fullPath)

    虽然我建议您在最初创建记录时执行上述处理,以节省您以后必须进行进一步处理,存储路径和文件名。这样你就可以选择文件名,如果这是你所需要的。

    【讨论】:

    • 我认为你在正确的轨道上 garty,我根据你的建议更改了我的代码: .... while (reader.Read()) { string fileName = reader.GetString(0); Console.Write(文件名);现在代码返回:“C:\Users\xmlfiles\”这正是我在我的 sql 表的路径列中所拥有的。我现在如何从所述文件夹中的文件中获取文件名(文件夹中的文件:testxml.xml:C:\Users\xmlfiles\ --> 它应该返回“testxml”)?
    • 你没有。此时您已经丢失了该数据。您需要做的是在创建路径表行时存储完整路径或将文件名存储在第二列中。或者,您可以迭代路径 foreach(string fullPath in System.IO.Directory.GetFiles("")) { string fileName = System.IO.Path.GetFileNameWithoutExtension(fullPath); } ` 处的所有文件
    • 如果您只在pathtable 中存储了C:\Users\xmlfiles\` for the path` 列,那么您只有C:\Users\xmlfiles`. You should store the full path C:\Users\xmlfiles\testxml.xml`。
    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多