Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-SQL数据库-发送查询以更新记录,但是太多的更新请求会导致某些数据丢失_C#_Mysql_Sql_Updates - Fatal编程技术网

C#-SQL数据库-发送查询以更新记录,但是太多的更新请求会导致某些数据丢失

C#-SQL数据库-发送查询以更新记录,但是太多的更新请求会导致某些数据丢失,c#,mysql,sql,updates,C#,Mysql,Sql,Updates,我到处寻找,所以如果我错过了什么,我道歉 当我运行源代码时,没有出现错误,看起来一切都正常工作,但是当我检查数据库时,只有一些记录被更新/添加,其他记录被丢失 当前更新的速率在每秒1到每秒25之间变化(有些净空/只是以防万一,但通常在15左右) 在本节中,我查询数据库以提取现有值,对这些值进行调整,然后将其保存回数据库 下面是更新SQL数据库的代码段,大约有43列正在更新(有些列可能保持不变,但正在重新添加) 是否有任何方法可以确保所有更新请求都通过并成功更新 try { MySqlCo

我到处寻找,所以如果我错过了什么,我道歉

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

当前更新的速率在每秒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();
    }
}

为了更好地进行比较,请在
SQL
C
中使用&i-e
LTRIM(RTRIM(username))
use 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);

为避免区分大小写的比较,请在
SQL
C
中使用i-e
LOWER(username)
,因此
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”是字符串

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

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


问候。

@X-TECH表示where子句由于空格填充而丢失记录<代码>“\uuuu Smith\uuuuuuuu”(分数下表示空格)不等于
“Smith”
。还要检查数据库的排序规则是否区分大小写。如果“Smith”不等于“Smith”。当您检查数据库时,您是否看到任何其他迹象表明添加或更新记录的努力不成功?嘿,大家好,我知道我没有提供参数的完整来源(例如用户名)。用户名已被修复,因此我可以验证这不是问题所在。-为了添加更多细节,除了上面的代码之外,我将所有内容都记录在一个单独的表中——代码的这一部分在另一个表中添加了一个新行,并添加了用户名、消息和时间。这是以同样的速度更新的,这只是一个简单的插入。我将插入此更新,看看您建议的更改发生了哪些更改,我相信用户名的SQL查询部分已经更改。我还注意到,慢不是直接的SQL,而是进来的信息量(数据源是IRC),实际上它越来越慢,因为聊天比我的设置过程快。-关于SQL查询和准确性,您的建议肯定会确保不会出现与此相关的问题。谢谢(小贴士,我输入的条目是为了查看它是否在从IRC条目到它流入我的系统,然后再到DB…IRC问题的大约10分钟内更新)
cmd2.CommandText = "UPDATE user_information SET exampleValue = @exampleValue WHERE LOWER(LTRIM(RTRIM(username))) = @username";
cmd2.Parameters.AddWithValue("@username", username.Trim().ToLower());