gpt4 book ai didi

c# - 在 C# 中,如何检查表中的字段是否已经存在?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:22 25 4
gpt4 key购买 nike

我想在表中添加电器详细信息。然后我想检查电器是否已经存在。如果已经存在则报错,不往表中插入数据。

    private void button4_Click(object sender, EventArgs e)
{
if (textBox4.Text != "" & textBox5.Text != "" & textBox13.Text != "" & dateTimePicker1.Text != "")
{
con.Open();
if(textBox13.Text == "Fan")
{
cmd.CommandText = "select * from Appliance_Location where Appliance_Id = '" + textBox4.Text + "'";
cmd.Connection = con;
//con.Open();
cmd.ExecuteNonQuery();
dr = cmd.ExecuteReader();

if (dr.HasRows)
{
MessageBox.Show("Already Exist", "Error Occured", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
cmd.CommandText = "insert into Appliance_Location(Appliance_Id, RoomId,ApplianceName,AddDate) values ('" + textBox4.Text + "' ,'" + textBox5.Text + "','" + textBox13.Text + "', '" + dateTimePicker1.Text + "');Update Appliance_Count set Fan = Fan + 1 where RoomId = '" + textBox5.Text + "' ";
// cmd.ExecuteNonQuery();
cmd.Clone();
MessageBox.Show("New Fan added !", "Add Appliance", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();

textBox4.Text = "";
textBox5.Text = "";
textBox13.Text = "";
dateTimePicker1.Text = "";
}
//loadtable();
}
}

我刚试过这段代码。但是数据没有插入到表中。

enter image description here

最佳答案

为什么要调用 SqlCommand.Clone()?您实际上并没有执行查询,您只是打开和关闭连接。

您已经注释掉了需要执行的代码行:

cmd.ExecuteNonQuery();

如果不实际执行查询,您实际上什么都不做(没有数据修改)。

编辑

根据您的评论,您收到一个错误消息,指出已经有一个开放数据阅读器。您需要调用 SqlDataReader.Close() 来解决该问题。

但没有真正的理由使用数据读取器只是测试数据是否存在(以确定是否需要插入行)。只需执行 select count(*) ... 即可:

         cmd.CommandText = "select count(*) from Appliance_Location where Appliance_Id = '" + textBox4.Text + "'";
cmd.Connection = con;
con.Open();
int rowCount = (int)cmd.ExecuteScalar();

if (rowCount == 0)
{
MessageBox.Show("Already Exist", "Error Occured", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

super 重要!!!!

您让自己面临最常见的黑客/攻击形式之一:SQL 注入(inject)

您需要参数化您的 SQL 查询以防止 SQL 注入(inject):

cmd.CommandText = "select count(*) from Appliance_Location where Appliance_Id = @ApplicationId;";
cmd.Parameters.Add(new SqlParameter("@ApplicationId", SqlDbType.VarChar, 32) { Value = textBox4.Text });

以上代码假设您的 ApplicationId 列是 varchar(32) 类型,但请适当调整。

关于c# - 在 C# 中,如何检查表中的字段是否已经存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31707712/

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