C# C&SQL Server CE:在搜索中将定义符号(+或&)后的单词作为单独的单词处理(&SQL Server CE)
我正在开发一个基于C&SQLServerCE3.5的简单翻译应用程序 我有一个搜索文本框,它通过文本框1搜索数据库中的某些列。文本使用常规SQL查询[选择..如“%” 我想要达到的目标: 我想搜索某些符号后面的所有单词,例如数据库中的所有位置,这样它们就不需要在数据库中存在的完整上下文中逐字逐句地编写 换言之: 我想在某些符号后拆分单词,这样程序就可以独立搜索每个单词,分别搜索符号前的单词和符号后的单词 例如: 如果我试图搜索举证责任的价值,我必须在前面的上下文中编写它,但对于用户来说,这将不适用。因此,我希望他在他愿意寻找的两个词之间加上一个符号,即他应该寻找负担+证据 图一:图二: 编辑-我的搜索按钮代码:C# C&SQL Server CE:在搜索中将定义符号(+或&)后的单词作为单独的单词处理(&SQL Server CE),c#,sql-server-ce,C#,Sql Server Ce,我正在开发一个基于C&SQLServerCE3.5的简单翻译应用程序 我有一个搜索文本框,它通过文本框1搜索数据库中的某些列。文本使用常规SQL查询[选择..如“%” 我想要达到的目标: 我想搜索某些符号后面的所有单词,例如数据库中的所有位置,这样它们就不需要在数据库中存在的完整上下文中逐字逐句地编写 换言之: 我想在某些符号后拆分单词,这样程序就可以独立搜索每个单词,分别搜索符号前的单词和符号后的单词 例如: 如果我试图搜索举证责任的价值,我必须在前面的上下文中编写它,但对于用户来说,这将不适
sqlcmd = new SqlCeCommand
("SELECT * FROM T1 WHERE EnglishWord like '%" + textBox1.Text + "%' OR EnglishDesc like '%" + textBox1.Text + "%' OR ArabicWord like '%" + textBox1.Text + "%' OR ArabicDesc like '%" + textBox1.Text + "%' ", sqlcon);
try
{
listView1.Items.Clear();
sqldr = sqlcmd.ExecuteReader();
while (sqldr.Read())
{
ListViewItem item = new ListViewItem(sqldr["ID"].ToString());
item.SubItems.Add(sqldr["EnglishWord"].ToString());
item.SubItems.Add(sqldr["EnglishDesc"].ToString());
item.SubItems.Add(sqldr["ArabicDesc"].ToString());
item.SubItems.Add(sqldr["ArabicWord"].ToString());
item.SubItems.Add(sqldr["Subject"].ToString());
listView1.Items.Add(item);
}
listView1.Enabled = true;
label7.Text = listView1.Items.Count.ToString();
}
catch (SqlCeException ex)
{
MessageBox.Show("Error: " + ex.Message, "Something wrong");
}
嗯。所以你从这里的答案中得到了不同的词。 您有这个字符串[]结果,您知道如果长度为1,那么它根本没有拆分。如果它大于1,则原始文本将被+或其他形式拆分 我不确定你到底想实现什么,但你可以做到这一点
if(result.Length == 1)
{
//Select * from database where column = result[0]
}
else
{
foreach(string s in result)
{
//Select * from database where column like '%'+s+'%' (better if you do with parameters)
}
}
答复:Richard Deeming@
假设您希望查找每个单词至少出现在四列中的一列中的所有记录,类似这样的方法应该可以工作:
sqlcmd = sqlcon.CreateCommand();
string[] words = textBox1.Text.Split(new[] { '+' }, StringSplitOptions.RemoveEmptyEntries);
StringBuilder query = new StringBuilder("SELECT * FROM T1 WHERE 1 = 1");
for (int index = 0; index < words.Length; index++)
{
string wordToFind = words[index];
string parameterName = "@word" + index;
sqlcmd.Parameters.AddWithValue(parameterName, "%" + wordToFind + "%");
query.AppendFormat(" AND (EnglishWord Like {0} OR EnglishDesc Like {0} OR ArabicWord Like {0} OR ArabicDesc Like {0})", parameterName);
}
sqlcmd.CommandText = query.ToString();
再次感谢您的关注,但请原谅我的无知。我将试着用一个例子来重新表述我的问题。如果我在数据库中有一条记录,它的值是C,我试着用C,good搜索它,它不会显示任何东西,对吗?在我们的例子中,我试图实现的是在预定义的符号+后拆分搜索命令,因此当我尝试搜索C+good时,它将尝试在同一记录中查找C和good,而不需要两个单词紧跟其后。如果你能修改我提供的代码就太好了。提前感谢是的,如果您搜索C good,它将不会显示,因为您没有+或其他内容。但是如果你搜索C+好,它会显示你想要的。如果搜索C good,代码将输入第一个if语句,如果搜索C+good,代码将输入else部分。先生,我想你现在明白我的意思了,问题是我不知道如何使用这里和另一个问题中提到的方法将其应用到我的代码中。编辑:我已经重新表述了整个问题,提供了图片。我真的非常想让这个功能正常工作,非常感谢你的帮助,谢谢。
SELECT
*
FROM
T1
WHERE
1 = 1
And
(
EnglishWord Like @word0
Or
EnglishDesc Like @word0
Or
ArabicWord Like @word0
Or
ArabicDesc Like @word0
)
And
(
EnglishWord Like @word1
Or
EnglishDesc Like @word1
Or
ArabicWord Like @word1
Or
ArabicDesc Like @word1
)
/*
Parameters:
- @word0 = '%burden%'
- @word1 = '%proof%'
*/