Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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# UPDATE语句,用于使用C更新MySQL数据库中的特定行#_C#_Mysql_Workbench - Fatal编程技术网

C# UPDATE语句,用于使用C更新MySQL数据库中的特定行#

C# UPDATE语句,用于使用C更新MySQL数据库中的特定行#,c#,mysql,workbench,C#,Mysql,Workbench,我在数据库中将ID设置为每个表的主键,我不知道如何编写代码来更新C#Windows窗体应用程序中表“clan”中的某些行 我以前的代码容易受到SQL注入的攻击,SQL注入也不会更新表,但我放弃了该代码并对其进行了更改 这是我试图更新某些表的代码。 在这里您可以看到我的应用程序设计和表创建 try { connection = new MySqlConnection(); connection.ConnectionSt

我在数据库中将ID设置为每个表的主键,我不知道如何编写代码来更新C#Windows窗体应用程序中表“clan”中的某些行

我以前的代码容易受到SQL注入的攻击,SQL注入也不会更新表,但我放弃了该代码并对其进行了更改

这是我试图更新某些表的代码。 在这里您可以看到我的应用程序设计和表创建

        try
        {
            connection = new MySqlConnection();
            connection.ConnectionString = conString;
            connection.Open();


            string Query="UPDATE clan SET ime=@ime, prezime=@prezime, dob=@dob, oib=@oib";

            using (MySqlCommand command = new MySqlCommand(Query, connection))
                {
                    command.Parameters.AddWithValue("@ime", ime);
                    command.Parameters.AddWithValue("@prezime", prezime);
                    command.Parameters.AddWithValue("@dob", datum_rodenja);
                    command.Parameters.AddWithValue("@oib", oib);

                    command.ExecuteNonQuery();
                }

                MessageBox.Show("Uspješno ažuriran član!");

                DialogResult dialogResult = MessageBox.Show(" Želite li ažurirati još jednog člana? ", "", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    this.Focus();
                }
                else
                {
                    this.Close();
                }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

只需在SQL语句中添加一个
where
子句:
UPDATE-clan-SET-ime=@ime,prezime=@prezime,dob=@dob,oib=@oib-where-id=@id
@haldo我添加了该子句,但它给出了在命令执行过程中遇到的致命错误。我不知道如何让我的应用程序使用id(主键、非空、唯一索引和自动递增都标记在表中)来知道要更新哪个成员。@这是一个亲切的响应;我也会删除我的评论。我经常看到类似的评论,所以我考虑写一篇关于它的文章。归根结底,MySQL的文本协议只是线上的字符串。无论您如何在代码中键入参数值,它们都会以
123、'abc'
等形式发送。无论如何,服务器会解析它们并根据列类型检查它们。与SQL Server不同,没有“类型”信息通过网络发送,因此设置参数类型毫无意义,
AddWithValue
是最有效的方法。您是否有要更新的行的id?如果是这样,请使用@haldo的代码确保添加额外的参数
command.Parameters.AddWithValue(“@id”,id))@BradleyGrainger:我认为那篇文章中的线表示方面是一种误导。
AddWithValue
(至少对于Sql提供程序)的真正问题在于如何检测提供程序对象(预连线)中的数据类型(包括长度)。重用命令及其参数以使用不同的值重复命令是一个有效的用例,如果第一个值比后面的值短,则可能会出现严重错误。