SQL 更新错误 + WHERE 子句说明
Posted
技术标签:
【中文标题】SQL 更新错误 + WHERE 子句说明【英文标题】:SQL Update Error + WHERE Clause Clarification 【发布时间】:2014-02-08 08:19:11 【问题描述】:我的 SQL 表有一个编辑表单,其中包含供用户编辑所选记录详细信息的文本框。加载时,所选记录/行的详细信息/信息被插入到相应的文本框中,一旦用户更改了他们想要的内容,则通过单击 Updatebtn
更新整个记录。
连接已成功建立,编辑表单按预期填充文本框。但是,当我单击Updatebtn
时,我收到以下错误(尽管它可能不限于一个错误!)
“System.Data.SqlClient.SqlException”类型的未处理异常 发生在 System.Data.dll
附加信息:找不到存储过程“P”。
它突出显示cmd.ExecuteScalar()
Updatebtn
代码如下 - 请注意,我使用并改编了我的添加按钮中的代码,该代码运行良好,因此我知道此方法有效。另请检查我的 WHERE 条款;我不确定这是否是引用我选择并想要更新的记录的正确方法。
附加信息:WHERE 子句中的 midtxt.Text
由表单加载填充,并包含 DataGridView 中所选索引/项目的 Members_ID。
Private Sub Updatebtn_Click(sender As Object, e As EventArgs) Handles Updatebtn.Click
stcon = "Data Source =**.**.**.***;Initial Catalog=Members_Details;Integrated Security=False;User=UGSTUDIOLEADERSHIP;Password=****************;"
con = New SqlConnection(stcon)
con.Open()
p(0) = New SqlParameter("@Members_ID", SqlDbType.Int)
p(1) = New SqlParameter("@Gamer_Tag", SqlDbType.VarChar, 255)
p(2) = New SqlParameter("@Screenname", SqlDbType.VarChar, 255)
p(3) = New SqlParameter("@First_Name", SqlDbType.VarChar, 255)
p(4) = New SqlParameter("@Last_Name", SqlDbType.VarChar, 255)
p(5) = New SqlParameter("@DoB", SqlDbType.VarChar, 255)
p(6) = New SqlParameter("@E_Mail_Address", SqlDbType.VarChar, 255)
p(7) = New SqlParameter("@Position", SqlDbType.VarChar, 255)
p(8) = New SqlParameter("@UG_Studio", SqlDbType.VarChar, 255)
p(9) = New SqlParameter("@Cautions", SqlDbType.VarChar, 255)
p(10) = New SqlParameter("@Record", SqlDbType.VarChar, 255)
p(11) = New SqlParameter("@Event_Attendance", SqlDbType.VarChar, 255)
p(12) = New SqlParameter("@Members_Status", SqlDbType.VarChar, 255)
p(13) = New SqlParameter("@GTA_V_Crew_Member", SqlDbType.VarChar, 255)
p(14) = New SqlParameter("@Games_Owned", SqlDbType.VarChar, 255)
p(15) = New SqlParameter("@Rep_Group", SqlDbType.VarChar, 255)
p(0).Value = midtxt.Text
p(1).Value = gttxt.Text
p(2).Value = sntxt.Text
p(3).Value = fntxt.Text
p(4).Value = lntxt.Text
p(5).Value = dobtxt.Text
p(6).Value = emailtxt.Text
p(7).Value = teamptxt.Text
p(8).Value = ugptxt.Text
p(9).Value = ugctxt.Text
p(10).Value = recordtxt.Text
p(11).Value = eventatxt.Text
p(12).Value = memberstatcombo.Text
p(13).Value = gtavcrewmembercombo.Text
p(14).Value = gamesownedtxt.Text
p(15).Value = RepGroupcombo.Text
cmd = New SqlCommand("UPDATE PersonsA SET(Members_ID=@Members_ID,Gamer_Tag=@Gamer_Tag,Screenname=@Screenname,First_Name=@First_Name,Last_Name=@Last_Name,DoB=@DoB,E_Mail_Address=@E_Mail_Address,Position=@Position,UG_Studio=@UG_Studio,Cautions=@Cautions,Record=@Record,Event_Attendance=@Event_Attendance,Members_Status=@Members_Status,GTA_V_Crew_Member=@GTA_V_Crew_Member,Games_Owned=@Games_Owned,Rep_Group=@Rep_Group WHERE Members_ID =)"(midtxt.Text), con)
cmd.Parameters.Add(p(0))
cmd.Parameters.Add(p(1))
cmd.Parameters.Add(p(2))
cmd.Parameters.Add(p(3))
cmd.Parameters.Add(p(4))
cmd.Parameters.Add(p(5))
cmd.Parameters.Add(p(6))
cmd.Parameters.Add(p(7))
cmd.Parameters.Add(p(8))
cmd.Parameters.Add(p(9))
cmd.Parameters.Add(p(10))
cmd.Parameters.Add(p(11))
cmd.Parameters.Add(p(12))
cmd.Parameters.Add(p(13))
cmd.Parameters.Add(p(14))
cmd.Parameters.Add(p(15))
cmd.ExecuteScalar() 'This is where the Error is detected.
MsgBox("Data has been saved!")
da = New SqlDataAdapter("SELECT * FROM PersonsA", con)
ds = New DataSet
da.Fill(ds, "PersonsA")
LeadersAccessTable.DataGridView1.DataMember = "PersonsA"
LeadersAccessTable.DataGridView1.DataSource = ds
con.Close()
End Sub
帮助会很大!我也是 vb 中的 SQL 新手。
【问题讨论】:
【参考方案1】:只需删除更新语句中 SET 子句周围的额外括号 ()
。像这样...
UPDATE PersonsA
SET Members_ID=@Members_ID,
Gamer_Tag=@Gamer_Tag,
Screenname=@Screenname,
First_Name=@First_Name,
Last_Name=@Last_Name,
DoB=@DoB,
.
.so on....
WHERE Members_ID = @var
【讨论】:
以上是关于SQL 更新错误 + WHERE 子句说明的主要内容,如果未能解决你的问题,请参考以下文章
在MySQL数据库中使用多个WHERE子句值更新多个列值时出现错误。
使用 where 和 order by 子句从 1 更新序列号的列