作者:sdfdsafgafsdf | 来源:互联网 | 2023-08-17 08:44
我有一个字符串(长文件路径),需要检查该字符串是否包含数据库记录。我该怎么办?
简化示例:
string filePath = @"C:\Users\me\folder1\foo\bar\documents\photos\img1.jpg";
我的数据库表是记录的单列:
foo
bar
asdf
movies
videos
我想搜索filePath
以查看它是否包含数据库中的任何记录(foo,bar等),然后返回这些记录。在我的示例中,filePath
包含foo
和bar
,因此我将返回foo
和bar
。
我确实有数千个文件路径可供搜索,并且我的数据库只有大约100条数据库记录,但是会逐渐变大。
真的迷失了从何处开始或者这是否是实现此目标的最佳方法,但我想不出另一种方法来实现。谢谢!
一种方法是分割路径字符串,然后使用WHERE IN进行SELECT查询,例如
SELECT SomeColumns
FROM MyTable
WHERE ColumnName IN ('string1','string2' ...);
但是我要采取的方法是对诸如Apache Lucene之类的所有路径进行索引,然后针对数据库中的每个术语查询索引以查看其所针对的路径。这是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 ReturnList(SqlConnection connection,string path)
{
List list = new List();
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;
}
结果: