C# 当数据库表中的数据与我的textBox1.text上提供的输入相匹配时,如何编写命令从数据库表中选择数据?
我正在使用一个windows应用程序,如果TextBox1上的输入与下面数据库表的Word列中的任何数据匹配,则该应用程序会将同义词显示到TextBox2。当我在Word列中输入任何单词时,下面的代码仅输出joying 请问我如何纠正和实现这一点 请参见下面的我的表格和代码:C# 当数据库表中的数据与我的textBox1.text上提供的输入相匹配时,如何编写命令从数据库表中选择数据?,c#,sql,database,C#,Sql,Database,我正在使用一个windows应用程序,如果TextBox1上的输入与下面数据库表的Word列中的任何数据匹配,则该应用程序会将同义词显示到TextBox2。当我在Word列中输入任何单词时,下面的代码仅输出joying 请问我如何纠正和实现这一点 请参见下面的我的表格和代码: **Id** **Word** **Synonym** 1 Happy Joyful 2 Sad Unhappy 3. Good Fine string constr = @&quo
**Id** **Word** **Synonym**
1 Happy Joyful
2 Sad Unhappy
3. Good Fine
string constr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=…\Database1.mdf;Integrated Security=True";
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("SELECT Synonym FROM Ant&Syn WHERE Id = 1"))
{
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
con.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
sdr.Read();
textBox2.Text = sdr["Synonym"].ToString();
}
}
con.Close();
使用如下参数化查询如何
string matchingWord = TextBox1.text;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("SELECT Synonym FROM Ant&Syn WHERE Word = @word"))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@word", matchingWord)
cmd.Connection = con;
con.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
sdr.Read();
textBox2.Text = sdr["Synonym"].ToString();
}
}
con.Close();
}
使用SQL参数 它执行查询以筛选要搜索的单词,并返回所有可用的同义词
0..*
,使用泛型类存储将在文本框中连成一行显示的值(如果未找到,则为空字符串):
改进-重构
我们可以创建一个方法并使用关键字返回:
改进-不区分大小写的比较
我们可以使用标志设置选项:
IEnumerable<string> GetSynonyms(string word, bool caseInsensitive)
{
using ( var connection = new SqlConnection(connectionString) )
try
{
connection.Open();
using ( var command = connection.CreateCommand() )
{
string checkColumn = caseInsensitive ? "lower(Word)" : "Word";
string checkMatch = caseInsensitive ? word.ToLower() : word;
command.CommandText = "SELECT Synonym FROM [Ant&Syn] WHERE " + checkColumn + " = ?";
command.Parameters.Add("@word", DbType.String).Value = checkMatch;
using ( var reader = command.ExecuteReader() )
while ( reader.Read() )
yield return reader[0].ToString();
}
}
finally
{
connection.Close();
}
}
IEnumerable GetSynonyms(字符串字,布尔不区分大小写)
{
使用(var连接=新的SqlConnection(connectionString))
尝试
{
connection.Open();
使用(var command=connection.CreateCommand())
{
字符串检查列=不区分大小写?“较低(Word)”:“Word”;
字符串检查匹配=不区分大小写?word.ToLower():word;
command.CommandText=“从[Ant&Syn]中选择同义词,其中“+checkColumn+”=?”;
command.Parameters.Add(“@word”,DbType.String).Value=checkMatch;
使用(var reader=command.ExecuteReader())
while(reader.Read())
产生返回读取器[0]。ToString();
}
}
最后
{
connection.Close();
}
}
其中Id=1将始终检索相同的记录。您需要更改此条件以使用文本框中的字符串。搜索如何在中使用WHERE语句sql@Steve,谢谢你注意到了。我将阅读更多关于如何在中使用WHERE语句的内容sql@OlivierRogier,谢谢你给我介绍这个链接。这篇文章很有帮助。然而,我尝试了以下方法:从Ant&Syn中选择同义词,其中Word='“+TextBox1+”“不起作用。你有更好的建议给我吗。我是新来的。仍在学习接受的答案包含错误以及原始代码。您正在调用Read,但您不关心该读取的结果。如果没有匹配的记录,则没有要读取的内容,调用返回false。当Read返回false时,您不应该盲目地从读取器中提取值。非常感谢。我的程序在遵循了您的建议后,现在似乎正在按预期工作。不建议使用AddWithValue
:哇!感谢您分享有关AddWithValue使用的这方面信息。非常有用。在编程的世界里有很多东西需要学习和发现,非常感谢。我已将其保存以供以后测试。我希望它能在VisualStudio2019中与LocalDB一起工作?正如我前面提到的,我真的很新,还在学习。所以请对我耐心点。我尝试了您的代码,但出现以下两个错误:第一个错误是:“当前上下文中不存在名称‘Builder’”。第二个错误是:“找不到类型或命名空间名称‘List’(是否缺少using指令或程序集引用?)
var synonyms = new List<string>();
using ( var connection = new SqlConnection(connectionString) )
try
{
connection.Open();
using ( var command = connection.CreateCommand() )
{
command.CommandText = "SELECT Synonym FROM [Ant&Syn] WHERE Word = ?";
command.Parameters.Add("@word", SqlDbType.Text).Value = TextBox1.text;
using ( var reader = command.ExecuteReader() )
while ( reader.Read() )
synonyms.Add(reader[0].ToString());
}
}
finally
{
connection.Close();
}
TextBox2.Text = string.Join(", ", synonyms);
IEnumerable<string> GetSynonyms(string word)
{
using ( var connection = new SqlConnection(connectionString) )
try
{
connection.Open();
using ( var command = connection.CreateCommand() )
{
command.CommandText = "SELECT Synonym FROM [Ant&Syn] WHERE Word = ?";
command.Parameters.Add("@word", SqlDbType.Text).Value = word;
using ( var reader = command.ExecuteReader() )
while ( reader.Read() )
yield return reader[0].ToString();
}
}
finally
{
connection.Close();
}
}
var synonyms = GetSynonyms(TextBox1.text);
IEnumerable<string> GetSynonyms(string word, bool caseInsensitive)
{
using ( var connection = new SqlConnection(connectionString) )
try
{
connection.Open();
using ( var command = connection.CreateCommand() )
{
string checkColumn = caseInsensitive ? "lower(Word)" : "Word";
string checkMatch = caseInsensitive ? word.ToLower() : word;
command.CommandText = "SELECT Synonym FROM [Ant&Syn] WHERE " + checkColumn + " = ?";
command.Parameters.Add("@word", DbType.String).Value = checkMatch;
using ( var reader = command.ExecuteReader() )
while ( reader.Read() )
yield return reader[0].ToString();
}
}
finally
{
connection.Close();
}
}