gpt4 book ai didi

c# - 保存到数据库时如何跳过 ListView 行?

转载 作者:行者123 更新时间:2023-11-29 07:53:51 26 4
gpt4 key购买 nike

这是我在 C# 中将 listview 项目保存到 mysql 数据库中的代码...如果 listview 行上没有插入数据,我如何跳过该行?我有点不知道在哪里插入 If 语句..请问有人吗?

for (int cnt = 0; cnt <= lv1.Items.Count - 1; cnt++)
{
string query = "insert into results(sid,c_id)values('" + _studid + "','" + lv1.Items[cnt].SubItems[2].Text + "')";

conn.Open();
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.ExecuteNonQuery();
conn.Close();


}

最佳答案

从循环中提取所有代码来构建 MySqlCommand 并初始化两个参数,第一个参数始终具有相同的值,而第二个参数则不同。因此,在循环内检查 ListView 子项中的空值,如果不为空,则设置第二个参数的值。现在您可以执行它,后续循环只需更改第二个参数的值。

string query = "insert into results(sid,c_id)values(@id, @cid))";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = _stuid;
cmd.Parameters.Add("@cid", MySqlDbType.Int32);

conn.Open();

for (int cnt = 0; cnt < lv1.Items.Count; cnt++)
{
string subItem = lv1.Items[cnt].SubItems[2].Text;
if(!string.IsNullOrWhiteSpace(subItem))
{
cmd.Parameters["@cid"].Value = Convert.ToInt32(subItem);
cmd.ExecuteNonQuery();
}

}
conn.Close();

通过这种方式,您只需打开一次连接并在执行循环之前准备命令。该命令使用参数化查询,因此它不会受到 Sql Injection 的影响。 .
还要看看没有引号和字符串连接的 sql 字符串如何更具可读性。

最后的注释:
我假设 c_id 字段是数字字段。
我已将 for...循环更改为更简单的形式。
这种代码导致使用事务来保持所有内容的原子性(这意味着,如果一次插入失败,所有内容都应该回滚,而不会对数据库进行任何更改)。欲了解更多信息,请查看this question

关于c# - 保存到数据库时如何跳过 ListView 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647982/

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