gpt4 book ai didi

c# - 实现数据库搜索

转载 作者:行者123 更新时间:2023-11-29 02:29:46 25 4
gpt4 key购买 nike

我使用 mysql 作为我存储数据的数据库。

我有一个带有文本框、单选按钮、组合框等的窗口窗体;人们提供有关自己的个人信息,例如(名字、姓氏、性别、生日日期、电话、父亲姓名等)。 (共 40 个字段)

我想做一个搜索按钮。使用此按钮,我想填写一些字段,在我按下搜索按钮后,将打开一个新窗口,其中包含所有具有相同个人信息的人。我实现了为一个字段做一个搜索按钮(例如仅按名称搜索)。

但是当我选择搜索多个字段时,我遇到了一个问题。例如,我选择搜索所有姓名为:Chris、昵称:Dung、性别:Male、Birth_Country:UK 等的人,但是当我按下搜索时,它会返回一个与搜索数据无关的窗口。有人可以帮我吗?

修改后我为搜索按钮做的代码是:

public MySqlDataAdapter da;
public DataSet ds;
public string sTable = "data";

private void anazitisi_button_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
try
{
conn = openconnectio.GetConn();

string radiob = null;
if (radioButton1.Checked == true)
{
radiob = radioButton1.Text;
}
else if(radioButton2.Checked == true)
{
radiob = radioButton2.Text;
}

StringBuilder Query = new StringBuilder("SELECT * FROM data d INNER JOIN country c ON d.id_data = c.id_country WHERE 1=1 ");
if (!String.IsNullOrEmpty(textBox1.Text))
Query.Append(" AND name like '" + textBox1.Text + "'");
if (!String.IsNullOrEmpty(textBox2.Text))
Query.Append(" AND lastname like '" + textBox2.Text + "'");
if (!String.IsNullOrEmpty(radiob))
Query.Append(" AND sex like '" + radiob + "'");
if (!String.IsNullOrEmpty(maskedTextBox1.Text))
Query.Append(" AND birthdate like '" + maskedTextBox1.Text + "'");
if (!String.IsNullOrEmpty(maskedTextBox2.Text))
Query.Append(" AND phone_number like '" + maskedTextBox2.Text + "'");

MySqlDataAdapter da = new MySqlDataAdapter(Query.ToString(), conn);
ds = new DataSet();
da.Fill(ds, sTable);
conn.Close();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message);

}
finally
{
DataGridView dg1 = new DataGridView();
form2.Controls.Add(dg1);
dg1.Dock = DockStyle.Fill;

dg1.Refresh();
dg1.DataSource = ds;
dg1.DataMember = sTable;

form2.Show();

if (conn != null)
{
conn.Close();
}
}
}

当我评论该代码时,搜索后的结果很好:
(生日代码)当然我没有用作搜索。

        //if (!String.IsNullOrEmpty(maskedTextBox1.Text))
// Query.Append(" AND birthdate like '" + maskedTextBox1.Text + "'");

但是当我使用(生日代码)时,我得到的结果只有一个空白行。
我认为 因为生日掩码文本框有掩码:00/00/0000
有什么建议吗?
谢谢。

最佳答案

我认为你应该考虑三件事
1- 您可以在查询中将 OR 替换为 And
我的意思是不使用

da = new MySqlDataAdapter(
"SELECT * FROM data INNER JOIN country ON id_data = id_country
WHERE name like '" + textBox1.Text +
"'OR lastname like '" + textBox2.Text +
"'OR sex like '" + radiob +
"'OR birthdate like '" + maskedTextBox1.Text +
"'OR phone
_number like '" + maskedTextBox2.Text + "' ;", conn);

你可以使用

 da = new MySqlDataAdapter(
"SELECT * FROM data INNER JOIN country ON id_data = id_country
WHERE name like '" + textBox1.Text +
"'AND lastname like '" + textBox2.Text +
"'AND sex like '" + radiob +
"'AND birthdate like '" + maskedTextBox1.Text +
"'AND phone_number like '" + maskedTextBox2.Text + "' ;", conn);

2- 您必须根据您的文本框构建查询字符串,然后查看它们是否有任何值(value),如下所示:

StringBuilder Query = "SELECT * FROM data INNER JOIN country ON id_data = id_country 
WHERE 1=1 ";
if(!String.IsNullOrEmpty(textBox1.Text))
Query.Append(" AND name like '" + textBox1.Text);
....

3- Sql Injection vulnerabilities

关于c# - 实现数据库搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15053978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com