C# 如何检查字符串是否包含数据库记录?
我有一个长文件路径的字符串,需要检查该字符串是否包含数据库记录。我该怎么做 简化示例: string filePath=@C:\Users\me\folder1\foo\bar\documents\photos\img1.jpg 我的数据库表是一列记录: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 我真的有数千个文件路径要
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注入敞开了大门,因为它的实现很幼稚。