c# - SQL数据库-发送查询来更新记录,但是太多的更新请求导致一些记录被遗漏



我已经到处搜索了,如果我错过了什么,我很抱歉。

当我运行源代码时,没有出现错误,看起来好像一切都正常工作,但是当我检查数据库时,只有一些记录被更新/添加,而其他记录被遗漏。

当前的更新速率在每秒1到每秒25之间变化(有些空间/只是以防,但通常在15左右)。

在本节中,我查询数据库以提取现有值,对这些值进行调整,然后将其保存回数据库。

下面是更新SQL数据库的代码片段,大约有43列被更新(有些可能保持相同的值,但它们正在被重新添加)。

是否有任何方法可以确保所有更新请求通过并成功更新?

try
{
    MySqlCommand cmd2 = connection.CreateCommand();
    connection.Open();
    cmd2.CommandType = CommandType.Text;
    cmd2.CommandText = "UPDATE user_information SET exampleValue = @exampleValue WHERE username = @username";
    cmd2.Parameters.AddWithValue("@username", username);
    cmd2.Parameters.AddWithValue("@exampleValue", exampleValue);
    cmd2.ExecuteNonQuery();
    connection.Close();
}
catch (Exception ex)
{
    throw;
}
finally
{
    if (connection.State == ConnectionState.Open)
    {
        connection.Close();
        //this.LoadData();
    }
}

为了更好地比较,请使用LTRIM &RTRIM i-e LTRIM(RTRIM(username))SQLC#中使用String.Trim() i-e usename.Trim()

LTRIM(RTRIM(username))将删除数据库中用户名的额外空格。Smith' -> 'Smith'和username.Trim()删除输入的空格

所以你要替换行

cmd2.CommandText = "UPDATE user_information SET exampleValue = @exampleValue WHERE username = @username";
cmd2.Parameters.AddWithValue("@username", username);

cmd2.CommandText = "UPDATE user_information SET exampleValue = @exampleValue WHERE LTRIM(RTRIM(username)) = @username";
cmd2.Parameters.AddWithValue("@username", username.Trim());

为了避免区分大小写的比较,在SQL中使用LOWER i-e LOWER(username),在C#中使用String.ToLower(),因此username.ToLower()

现在,代码将是这样的

cmd2.CommandText = "UPDATE user_information SET exampleValue = @exampleValue WHERE LOWER(LTRIM(RTRIM(username))) = @username";
cmd2.Parameters.AddWithValue("@username", username.Trim().ToLower());

根据您的代码片段,更新数据的方式没有问题。但我注意到的一点是你传递参数的方式。在这种情况下,您没有指定参数的数据类型。所以我假设'@username'和'@exampleValue'是字符串。

在某些情况下,如果表中列的数据类型与参数的数据类型不匹配。可能导致数据更新失败。

如果你能提供你的表格结构,以便我们进一步评估你的问题,那就更好了。

问候。

相关内容

  • 没有找到相关文章

最新更新