C# 我的主键没有更新
当我试图从文本框更新我的主键时,它没有得到更新。其余的列都会很好地更新。请帮帮我 我没有得到任何错误。没有什么。。当我尝试更新零件号时。。它没有更新。。只需返回到上一个值 将值更新到数据库的我的代码:C# 我的主键没有更新,c#,winforms,visual-studio-2010,visual-studio,datagridview,C#,Winforms,Visual Studio 2010,Visual Studio,Datagridview,当我试图从文本框更新我的主键时,它没有得到更新。其余的列都会很好地更新。请帮帮我 我没有得到任何错误。没有什么。。当我尝试更新零件号时。。它没有更新。。只需返回到上一个值 将值更新到数据库的我的代码: private void Update_Click(object sender, EventArgs e) { try { SqlConnection con = new SqlConnection(@"Data Source=SREEJITHMOHA492\SQL
private void Update_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection(@"Data Source=SREEJITHMOHA492\SQLEXPRESS;Initial Catalog=cndb;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand(@"update cncinfo set part='" + this.file_NameTextBox.Text
+ "',drawings='" + this.drawingsTextBox.Text + "',draftpath='"
+ this.gcodeTextBox.Text + "',comments='" + this.commentsTextBox.Text
+ "' where part='" + dataGridView1.Rows[0].Cells[0].Value.ToString() + "' ;", con);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void load_table()
{
SqlConnection con = new SqlConnection(@"Data Source=SREEJITHMOHA492\SQLEXPRESS;Initial Catalog=cndb;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("select part as 'Part Number',drawings as 'Drawings',draftpath as 'G-Code Path',releasepath as 'Release Path',comments as 'Comments' from cncinfo ;", con);
cmd.ExecuteNonQuery();
con.Close();
try
{
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
dbddataset = new DataTable();
sda.Fill(dbddataset);
BindingSource bSource = new BindingSource();
bSource.DataSource = dbddataset;
dataGridView1.DataSource = bSource;
sda.Update(dbddataset);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
提前感谢首先,使用参数。看 其次,您的
update
语句对set
和where
子句使用相同的输入:
@“更新cncinfo集合部分=”+此.file_NameTextBox.Text+”,“…”其中部分=”+此.file_NameTextBox.Text+”;”
仅选择已具有新值的行时,您计划如何更改部分的值?您需要同时使用新旧值:
@“更新cncinfo set part='”+此.file_NameTextBox.Text+”,“…”其中part='”+旧part+”
最后,ExecuteNonQuery
返回受影响的行数。如果您检查了该值,您会发现当您更新一行时它是1
,当您尝试更改part
的值时它是0
,除非已经有一行具有新的part
值(在这种情况下,您更新该行而不是在重复的零件上生成错误)
你也应该考虑使用A来连接和命令。< /P>如果
set
和where
子句都使用文件名textbox.Text
作为部分
列,您将如何更改该值?如果您检查由ExecuteNonQuery
返回的值,您在尝试更改零件名称时可能会发现该值为零,因为没有更新任何行。如果您使用SqlCommand Parameters
可以很容易地找出问题。似乎您没有更新零件号
列。正如@HABO所说,ExecuteNonQuery
不应该与Select
query一起使用。请给我一个代码帮助。这两天我一直在烦这个。我试了很多天。。不行!!!我访问了SqlConnection con=newsqlconnection(@“Data Source=SREEJITHMOHA492\SQLEXPRESS;Initial Catalog=cndb;Integrated Security=True”);con.Open();SqlCommand cmd=new SqlCommand(@“update cncinfo set part=”+this.file_NameTextBox.Text+”,draws=“+this.drawingsTextBox.Text+”,draftpath=”+this.gcodeTextBox.Text+”,comments=“+this.commentsTextBox.Text+”,其中part=”+dataGridView1.Rows[0]。单元格[0].Value.ToString()+“;”,con)
这次它只更改第一行。我假设当您告诉它更新与dataGridView1.Rows[0]
对应的数据库行时,您希望它总是更新“第一”行。如果你不是故意的,你就不会指定0
。用户是选择要编辑的行,还是只是键入一些建议值放在现有表上?如果他们选择一行,那么您可以将col[0]
值保存在一个变量中,例如oldPart
,几乎就在您将其复制到文件名文本框的同时,这样您就可以在它更改为其他内容之前知道它是什么。我做了dataGridView1.Column[0]。value.ToString()
这也是兄弟。。它的显示栏不包含上下文您似乎对您尝试使用的工具缺乏一些基本的了解:C#、.NET、SQL、debugger等等。我担心这将是您的第五个问题,因此这不会得到一个可接受的答案,因为您希望有大量的人手来引导您完成应用程序的编码。