删除和更新查询在 ADO.NET 中不起作用
Delete & Update query doesn't work in ADO.NET
我正在尝试使用 OleDbCommand class 的 Connected Architecture
删除 Access 数据库的记录
using System.Data.OleDb;
using System.Data;
protected void Button2_Click(object sender, EventArgs e)
{
String x = "Connection String...";
OleDbConnection con = new OleDbConnection(x);
con.Open();
String query = "Delete FROM TB WHERE NO=@number";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.AddWithValue("@number", TextBox2.Text);
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Deleted successfully";
}
else
{
Label.Text = "Not Deleted";
}
con.Close();
}
每次我尝试删除记录时 Else Condition 被执行但未被删除。
与 UPDATE 查询相同的问题,
protected void Button3_Click(object sender, EventArgs e)
{
String x = "Connection String..";
OleDbConnection con = new OleDbConnection(x);
con.Open();
String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
OleDbCommand cmd = new OleDbCommand(query, con);
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Updated successfully";
}
else
{
Label.Text = "Not Updated";
}
con.Close();
}
INSERT 查询工作得很好。
我哪里做错了?
如果它没有删除任何记录,这意味着 int res = cmd.ExecuteNonQuery();
返回 0 或没有记录被删除。确保 WHERE
子句 WHERE NO=@number
中的条件与任何记录匹配。验证 运行 一个 select 沿线具有相同条件
SELECT 1 FROM TB WHERE NO=@number
此外,尝试在打孔之前修剪文本框数据,如
cmd.Parameters.AddWithValue("@number", TextBox2.Text.Trim());
如果 NO
是 INT
类型,则在作为参数传递之前将其转换为整数,例如
cmd.Parameters.AddWithValue("@number", Convert.ToInt32(TextBox2.Text.Trim()));
您的 UPDATE
案例也可以遵循相同的规则。另外,我没有看到您为 UPDATE
查询传递任何参数。您刚刚在发布的代码中跳过了它吗?
String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
OleDbCommand cmd = new OleDbCommand(query, con);
我认为有任何 datatype
conversion error
,这就是它没有删除的原因,对于更新情况,您只是错过了要传递的参数 @name,@TextBox_No
看这里为什么要用Add()
您需要更改参数传递方式AddedWithValue() to Add()
删除:
String query = "Delete FROM TB WHERE NO=@number";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.Add("@number", OleDbType.Numeric, 30).Value=TextBox2.Text;
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Deleted successfully";
}
else
{
Label.Text = "Not Deleted";
}
con.Close();
and for Update u missed the parameter to pass:
String x = "Connection String..";
OleDbConnection con = new OleDbConnection(x);
con.Open();
String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.Add("@name ", OleDbType.VarChar, 200).Value=your_Name_Variable;//
cmd.Parameters.Add("@TextBox_NO", OleDbType.Numeric, 30).Value=Your_No_Variable;
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Updated successfully";
}
else
{
Label.Text = "Not Updated";
}
con.Close();
前言:我对 ASP.NET 一无所知,但我知道 MS Access。而 NO
是一个 reserved word。因此,如果使用保留字,在作为字段引用时可能会导致意外的答案或错误。
要解决这个问题,请考虑在删除和更新查询中将 NO
列括起来。
String query = "DELETE FROM TB WHERE [NO] = @number"
String query = "UPDATE TB SET NM = @name WHERE [NO] = @TextBox_NO"
我可以确认这个解决方案,因为我刚刚在 MS Access 2013 的 SQL 查询中测试了 NO
与 [NO]
列引用。前者返回零记录,但后者返回正确记录。
我正在尝试使用 OleDbCommand class 的 Connected Architecture
删除 Access 数据库的记录using System.Data.OleDb;
using System.Data;
protected void Button2_Click(object sender, EventArgs e)
{
String x = "Connection String...";
OleDbConnection con = new OleDbConnection(x);
con.Open();
String query = "Delete FROM TB WHERE NO=@number";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.AddWithValue("@number", TextBox2.Text);
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Deleted successfully";
}
else
{
Label.Text = "Not Deleted";
}
con.Close();
}
每次我尝试删除记录时 Else Condition 被执行但未被删除。
与 UPDATE 查询相同的问题,
protected void Button3_Click(object sender, EventArgs e)
{
String x = "Connection String..";
OleDbConnection con = new OleDbConnection(x);
con.Open();
String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
OleDbCommand cmd = new OleDbCommand(query, con);
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Updated successfully";
}
else
{
Label.Text = "Not Updated";
}
con.Close();
}
INSERT 查询工作得很好。 我哪里做错了?
如果它没有删除任何记录,这意味着 int res = cmd.ExecuteNonQuery();
返回 0 或没有记录被删除。确保 WHERE
子句 WHERE NO=@number
中的条件与任何记录匹配。验证 运行 一个 select 沿线具有相同条件
SELECT 1 FROM TB WHERE NO=@number
此外,尝试在打孔之前修剪文本框数据,如
cmd.Parameters.AddWithValue("@number", TextBox2.Text.Trim());
如果 NO
是 INT
类型,则在作为参数传递之前将其转换为整数,例如
cmd.Parameters.AddWithValue("@number", Convert.ToInt32(TextBox2.Text.Trim()));
您的 UPDATE
案例也可以遵循相同的规则。另外,我没有看到您为 UPDATE
查询传递任何参数。您刚刚在发布的代码中跳过了它吗?
String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
OleDbCommand cmd = new OleDbCommand(query, con);
我认为有任何 datatype
conversion error
,这就是它没有删除的原因,对于更新情况,您只是错过了要传递的参数 @name,@TextBox_No
看这里为什么要用Add()
您需要更改参数传递方式AddedWithValue() to Add()
删除:
String query = "Delete FROM TB WHERE NO=@number";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.Add("@number", OleDbType.Numeric, 30).Value=TextBox2.Text;
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Deleted successfully";
}
else
{
Label.Text = "Not Deleted";
}
con.Close();
and for Update u missed the parameter to pass:
String x = "Connection String..";
OleDbConnection con = new OleDbConnection(x);
con.Open();
String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
OleDbCommand cmd = new OleDbCommand(query, con);
cmd.Parameters.Add("@name ", OleDbType.VarChar, 200).Value=your_Name_Variable;//
cmd.Parameters.Add("@TextBox_NO", OleDbType.Numeric, 30).Value=Your_No_Variable;
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
Label.Text = "Updated successfully";
}
else
{
Label.Text = "Not Updated";
}
con.Close();
前言:我对 ASP.NET 一无所知,但我知道 MS Access。而 NO
是一个 reserved word。因此,如果使用保留字,在作为字段引用时可能会导致意外的答案或错误。
要解决这个问题,请考虑在删除和更新查询中将 NO
列括起来。
String query = "DELETE FROM TB WHERE [NO] = @number"
String query = "UPDATE TB SET NM = @name WHERE [NO] = @TextBox_NO"
我可以确认这个解决方案,因为我刚刚在 MS Access 2013 的 SQL 查询中测试了 NO
与 [NO]
列引用。前者返回零记录,但后者返回正确记录。