回答

收藏

C#+ MySQL准备的语句,带有/ ON DUPLICATE KEY UPDATE问题

技术问答 技术问答 148 人阅读 | 0 人回复 | 2023-09-12

我有一个C#应用程序正在使用带MySQL的ON DUPLICATE KEY UPDATE在准备语句时遇到问题。
9 l, k. K7 C, r; G) S! F; _$ A, H, K9 t当我在之前的断点检查连接变量时mypcmd.ExecuteNonQuery();,mypcmd.IsPrepared是false。查询不执行任何操作(应更新,因为主键已经存在),无异常。mypcmd.Parameters.count= 25如果我深入数据视图,应该是正确的,值是正确的。
) E. w# ~7 U( v查询通过时,键0将更新为所有参数名称(iefname:?fname,Middlename:?middlename等等,而不是准确值)5 H9 [" t' @/ b' B% o) y
MySQL5.服务器版本.0.51a-24   lenny5' w8 q3 w% E( D' [
MySQL C#程序集版本(mysql.data.dll)6.3.6.0
0 A' s  U! |# d) V  b0 Z/ ]! v( k应用是WPF .NET 4.0
代码如下:
7 P* s, x# f  s: ^- w( zconst string sqlIpatients = @"INSERT INTO `tblpatients` (  `number`,`fname`,`middlename`,`surname`,                           `title`,`contactno`,`mobileno`,`sex`,`dob`,                           `housename`,`houseno`,`address1`,`address2`,                           `address3`,`address4`,`postcode`,`notes`,`home`,                           `sp1`,`sp2`,`sp3`,`sp4`,`sp5`,`sp6`,`email`)                    VALUES( '?number','?fname','?middlename','?surname         title','?contactno','?mobileno','?sex','?dob         housename','?houseno','?address1','?address2         address3','?address4','?postcode','?notes','?home         sp1','?sp2','?sp3','?sp4','?sp5','?sp6','?email    ON DUPLICATE KEY UPDATE `number`=VALUES(`number`),`fname`=VALUES(`fname`),`middlename`=VALUES(`middlename`),`surname`=VALUES(`surname`),                           `title`=VALUES(`title`),`contactno`=VALUES(`contactno`),`mobileno`=VALUES(`mobileno`),`sex`=VALUES(`sex`),`dob`=VALUES(`dob`),                           `housename`=VALUES(`housename`),`houseno`=VALUES(`houseno`),`address1`=VALUES(`address1`),`address2`=VALUES(`address2`),                           `address3`=VALUES(`address3`),`address4`=VALUES(`address4`),`postcode`=VALUES(`postcode`),`notes`=VALUES(`notes`),`home`=VALUES(`home`),                           `sp1`=VALUES(`sp1`),`sp2`=VALUES(`sp2`),`sp3`=VALUES(`sp3`),`sp4`=VALUES(`sp4`),`sp5`=VALUES(`sp5`),`sp6`=VALUES(`sp6`),`email`=VALUES(`email`)";…6 n6 s' N% {2 R, L+ P" y; n) Q
MySqlCommand mypcmd = new MySqlCommand(sqlIpatients,myConn二、    mypcmd.Prepare();     mypcmd.Parameters.Add("?number",MySqlDbType.UInt3二、    mypcmd.Parameters.Add("?fname",MySqlDbType.VarChar,二十);    mypcmd.Parameters.Add("?middlename",MySqlDbType.VarChar,二十);    mypcmd.Parameters.Add("?surname",MySqlDbType.VarChar,40);    mypcmd.Parameters.Add("?title",MySqlDbType.VarChar,6);     mypcmd.Parameters.Add("?contactno",MySqlDbType.VarChar,40);    mypcmd.Parameters.Add("?mobileno",MySqlDbType.VarChar,40);    mypcmd.Parameters.Add("?sex",MySqlDbType.VarChar,一、    mypcmd.Parameters.Add("?dob",MySqlDbType.Date);    mypcmd.Parameters.Add("?housename",MySqlDbType.VarChar,二十);    mypcmd.Parameters.Add("?houseno",MySqlDbType.VarChar,二十);    mypcmd.Parameters.Add("?address1",MySqlDbType.TinyText);    mypcmd.Parameters.Add("?address2",MySqlDbType.TinyText);    mypcmd.Parameters.Add("?address3",MySqlDbType.TinyText);    mypcmd.Parameters.Add("?address4",MySqlDbType.TinyText);    mypcmd.Parameters.Add("?postcode",MySqlDbType.TinyText);    mypcmd.Parameters.Add("?notes",MySqlDbType.Text);    mypcmd.Parameters.Add("?home",MySqlDbType.UInt16);     mypcmd.Parameters.Add("?sp1",MySqlDbType.VarChar,一、    mypcmd.Parameters.Add("?sp2",MySqlDbType.VarChar,一、    mypcmd.Parameters.Add("?sp3",MySqlDbType.VarChar,一、    mypcmd.Parameters.Add("?sp4",MySqlDbType.VarChar,一、    mypcmd.Parameters.Add("?sp5",MySqlDbType.VarChar,一、    mypcmd.Parameters.Add("?sp6",MySqlDbType.VarChar,一、    mypcmd.Parameters.Add("?email",MySqlDbType.Text);    var prodr = procmd.ExecuteReader();     while (prodr.Read()foreach (MySqlParameter p in mypcmd.Parameters)                                                                                                                                                                                                                                                                                                                                                                                                             p.Value = prodr[p.ParameterName.Replace("?","")].ToString().Trim();        }    }    mypcmd.ExecuteNonQuery();我想念什么?请帮忙!! v5 V+ S0 X. u( u
                                                               
& d  N. t7 ]8 E. m5 U" K    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则