【问题标题】:Update on button click更新按钮点击
【发布时间】:2014-01-18 05:23:38
【问题描述】:

我有一个按钮,代码没问题,但是更新的时候出错了。

这是代码:

private void button1_Click(object sender, EventArgs e)
{
   SqlConnection conn = new SqlConnection();
   conn.ConnectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
   conn.Open();

   SqlCommand cmdC = conn.CreateCommand();
   cmdC.CommandText = "Update ComDet set cDetails = " + lblcDetails.Text + ", cDetails2 = '" + lblcDetails2.Text + "', PhoneNumber = '" + lblPhoneNumber.Text + "', PersonCharge = '" + lblPersonInCharge.Text + "' Where cName = '" + lblcNameP.Text + "'";
   cmdC.ExecuteNonQuery();
   MessageBox.Show("Data Updated");

}

这是错误..

链接到错误以获得更大的图片:Error Picture

表格如下所示:

现在在我看来,错误可能是文本框中的空格..但我不知道是不是。

谁能指出我哪里做错了?

【问题讨论】:

  • 不要使用串联的查询字符串,学习如何创建parameterized queries
  • "更新 ComDet 集 cDetails = '" + lblcDetails.Text + "', cDetails2 = '" + lblcDetails2.Text + "', PhoneNumber = '" + lblPhoneNumber.Text + "', PersonCharge = '" + lblPersonInCharge.Text + "' 其中 cName = '" + lblcNameP.Text + "'";
  • @PranavSingh - 是的,我错过了一个单引号..谢谢你指出来.. :)
  • 您已将初始目录设置为 master,我认为您必须将其设置为适当的 DB。

标签: c# sql winforms button sql-update


【解决方案1】:

不要在你的 sql 命令中使用字符串连接。您可能会遗漏一些引号,并且很难找到它的位置。使用parameterized queries

这种连接也对SQL Injection 攻击开放。

SqlCommand cmdC = conn.CreateCommand();
cmdC.CommandText = "Update ComDet set cDetails = @cDetails , cDetails2 = @cDetails2, PhoneNumber = @PhoneNumber, PersonCharge = @PersonCharge  Where cName = @cName";
cmdC.Parameters.AddWithValue("@cDetails", lblcDetails.Text);
cmdC.Parameters.AddWithValue("@cDetails2", lblcDetails2.Text);
cmdC.Parameters.AddWithValue("@PhoneNumber", lblPhoneNumber.Text);
cmdC.Parameters.AddWithValue("@PersonCharge  ", lblPersonInCharge.Text);
cmdC.Parameters.AddWithValue("@cName", lblcDetails.Text);
cmdC.ExecuteNonQuery();

【讨论】:

  • 你的意思是这样的吧? daS.SelectCommand.Parameters.Add("@CName", SqlDbType.VarChar, 100).Value = lblcNameP.Text;
  • 是的,我可以这样做......但我很着急......嘿......会在一分钟内改变它......再次感谢你...... :)代码工作正常,我是缺少 cDetails 上的单引号.. :)
  • @MohdNasrulIwanFajaruddin 我将答案更新为完整代码。看看吧。
  • 哦,我也是这样改的.. :) 谢谢...我知道如何做参数,但我还没有以这种形式做.. 再次感谢您.. :)
  • @MohdNasrulIwanFajaruddin 不客气。如果这些答案之一解决了您的问题,请考虑接受一个。 meta.stackexchange.com/questions/5234/…
【解决方案2】:

为了避免语法错误,请使用格式化字符串作为

cmdC.CommandText =string.Format("Update ComDet set cDetails = '{0}',cDetails2 ='{1}',PhoneNumber = '{2}',PersonCharge = '{3}' Where cName = '{4}'", lblcDetails.Text, lblcDetails2.Text , lblPhoneNumber.Text , lblPersonInCharge.Text , lblcNameP.Text );

【讨论】:

    【解决方案3】:

    我猜有两点不正确:

    在您的数据源上,初始目录是指您的数据库的名称。你有“主人”。应该是这样的:

    conn.ConnectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Initial Catalog=yourDBname;Integrated Security=True";
    

    此外,您的 SQL 语句中缺少引号(并且它们的顺序并不总是正确),应该是:

    cmdC.CommandText = "Update ComDet set cDetails = '" + lblcDetails.Text + "', cDetails2 = '" + lblcDetails2.Text + "', PhoneNumber = '" + lblPhoneNumber.Text + "', PersonCharge = '" + lblPersonInCharge.Text + "' Where cName = '" + lblcNameP.Text + "'";
    

    【讨论】:

      【解决方案4】:

      更改初始目录.put ypur 表名

      conn.ConnectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Initial Catalog=Datbasename;Integrated Security=True";
      

      这样试试

      cmd.Parameters.AddWithValue("@FirstDetail",textbox1.text);
      
      cmd.Parameters.AddWithValue("@SecondDetail", Textbox2.Text);
      

      refer here

      【讨论】:

      • 初始目录不是表名:初始目录是数据库名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多