[英]Delete & Update query doesn't work in ADO.NET
我正在嘗試使用連接架構的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();
}
每次我嘗試刪除記錄時,都會執行未刪除的其他條件。
與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 查詢工作得很好。 我哪里做錯了?
我認為存在任何datatype
conversion error
,這就是它沒有刪除的原因,對於更新情況,您只是錯過了傳遞@name,@TextBox_No
的參數
請參閱此處為什么要使用Add()
您需要將參數傳遞方法AddWithValue()更改為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();
前言:我對 ASP.NET 一無所知,但我知道 MS Access。 NO
是保留字。 因此,如果使用保留字作為字段引用時可能會導致意外的答案或錯誤。
要解決此問題,請考慮將刪除和更新查詢中的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
vs [NO]
列引用。前者返回了零記錄,但后者返回了正確的記錄。
如果它沒有刪除任何記錄,這意味着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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.