C# 如何检查字符串是否包含数据库记录?

C# 如何检查字符串是否包含数据库记录?,c#,sql,database,string,C#,Sql,Database,String,我有一个长文件路径的字符串,需要检查该字符串是否包含数据库记录。我该怎么做 简化示例: string filePath=@C:\Users\me\folder1\foo\bar\documents\photos\img1.jpg 我的数据库表是一列记录: foo bar asdf movies videos 我想搜索filePath,看看它是否包含数据库foo、bar等中的任何记录,然后返回这些记录。在我的示例中,文件路径包含foo和bar,因此我将返回foo和bar 我真的有数千个文件路径要

我有一个长文件路径的字符串,需要检查该字符串是否包含数据库记录。我该怎么做

简化示例:

string filePath=@C:\Users\me\folder1\foo\bar\documents\photos\img1.jpg

我的数据库表是一列记录:

foo
bar
asdf
movies
videos
我想搜索filePath,看看它是否包含数据库foo、bar等中的任何记录,然后返回这些记录。在我的示例中,文件路径包含foo和bar,因此我将返回foo和bar

我真的有数千个文件路径要搜索,我的数据库只有大约100条数据库记录,但会慢慢变大


真的不知道从哪里开始,或者这是否是最好的方法,但我想不出其他方法来实现这一点。谢谢

一种方法是拆分路径字符串,然后使用WHERE IN进行选择查询,例如

SELECT SomeColumns
FROM MyTable
WHERE ColumnName IN ('string1', 'string2' ...);

但我将采取的方法是在ApacheLucene中索引所有路径,然后针对数据库中的每个术语查询索引以查看它所针对的路径。这是Lucene的一个非常简单的用法,您应该能够轻松地在网上找到教程。

您也可以使用c代码来完成

下面是一个代码示例

 static void Main(string[] args)
        {
            string connectionstring = @"";
            SqlConnection connection = new SqlConnection(connectionstring);
            string filePath = @"C:\Users\me\folder1\foo\bar\documents\photos\img1.jpg";
            var list = ReturnList(connection,filePath);


        }
        static List<string> ReturnList(SqlConnection connection,string path)
        {
            List<string> list = new List<string>();
            char[] t = { '\\'};
            var array=path.Split(t).ToList();
            connection.Open();
            string sql = "select * from Record";
            SqlCommand command = new SqlCommand(sql, connection);
            SqlDataReader reader = command.ExecuteReader();
            while(reader.Read())
            {
                string a = reader["Name"].ToString();
                if(array.Contains(a))
                {
                    list.Add(a);
                }
            }
            connection.Close();
            return list;
        }
结果:


您只需在其上运行.Contains-if-filePath.Containsfoo&&filePath.Containsbar{…}。此外,您是否自己尝试过任何代码以获得想要的结果?或者你是在要求我们为你编写代码?@Symon我会这样做。包含但我需要搜索我的字符串以查找数百个不同的较小字符串,而不仅仅是一个或两个。然后你可以使用存储过程将字符串传递到数据库,并运行检查以查看字符串中是否有任何记录。然后,该过程可以返回找到的字符串,或者返回1/0来告诉您是,它包含foobar或否,它不包含foobarlucene听起来很有趣!我一定会检查的out@kryz在这里要特别小心,很容易不小心让自己对sql注入敞开了大门,因为它的实现很幼稚。