我正在尝试使用 OleDbCommand 类连接架构
删除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 都会执行,但不会删除。
与更新查询相同的问题,
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查询工作正常。 我在哪里做错了?
答案 0 :(得分:2)
我认为有datatype
conversion error
,这就是为什么它没有删除,而对于更新案例,您错过了传递@name,@TextBox_No
的参数
请参阅此处为何使用Add()
您需要将参数传递方法AddedWithValue()更改为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();
并且对于更新,您错过了要传递的参数:
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();
答案 1 :(得分:2)
前言:我对ASP.NET一无所知,但我确实知道MS Access。 NO
是reserved word。因此,如果使用保留字可能会在引用为字段时导致意外答案或错误。
要解决此问题,请考虑将删除和更新查询中的String query = "DELETE FROM TB WHERE [NO] = @number"
String query = "UPDATE TB SET NM = @name WHERE [NO] = @TextBox_NO"
列括起来。
NO
我可以确认此解决方案,因为我刚刚在MS Access 2013中的SQL查询中测试了[NO]
vs {{1}}列引用。前者返回零记录,但后者返回了正确的记录。
答案 2 :(得分:1)
如果它没有删除任何意味着int res = cmd.ExecuteNonQuery();
返回0或没有删除记录的记录。确保WHERE
子句WHERE NO=@number
中的条件与任何记录匹配。要验证沿着具有相同条件的行运行选择
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);