簡體   English   中英

如何使用C#從Microsoft Access表中刪除行

[英]How do I delete a row from a Microsoft Access table using c#

我已經試過這段代碼:

string sql = " DELETE FROM HotelCustomers WHERE [Room Number] =" +  textBox1.Text;
OleDbConnection My_Connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= c:\\Users\\Documents\\HotelCustomersOld.mdb");

My_Connection.Open();

OleDbCommand My_Command = new OleDbCommand(sql, My_Connection);
My_Command.ExecuteNonQuery();

錯誤:條件表達式中的數據類型不匹配,在以下行:My_Command.ExecuteNonQuery();

使用參數化查詢來避免各種錯誤

   string sql = " DELETE FROM HotelCustomers WHERE [Room Number] =?";
   using(OleDbConnection My_Connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= c:\\Users\\Documents\\HotelCustomersOld.mdb"))
   {
        My_Connection.Open();
        OleDbCommand My_Command = new OleDbCommand(sql, My_Connection);
        My_Command.Parameters.Add("@p1",  textBox1.Text);
        My_Command.ExecuteNonQuery();
   }

在您的情況下,Room NUmber字段為Text類型,因此,您需要將值括在單引號中,但這確實是錯誤的。 您將代碼暴露給用戶在文本框中寫入的惡意文字。 一個非常簡單有趣的例子

您的[房間號]列是哪種類型? 如果是字符串,則必須用逗號或引號引起來寫值(我不確定在Access中使用了兩者)。

string sql = " DELETE FROM HotelCustomers WHERE [Room Number] = '" +  textBox1.Text + "'";

為避免SQL注入,您應該使用Parameters而不是字符串操作。

public static void DeleteLine(string kv)
{
    OleDbConnection myConnection = GetConnection();
    string myQuery = "DELETE FROM Cloth WHERE [ClothName] = '" + kv + "'";
    OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);

    try
    {
        myConnection.Open();
        myCommand.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception in DBHandler", ex);
    }
    finally
    {
        myConnection.Close();
    }
}

嘗試

    {
        OleDbConnection con = new OleDbConnection("provider = microsoft.ace.oledb.12.0;data source = E:\\Sohkidatabase\\Sohki.accdb");
        con.Open();
        str = "select * from compny_info where id=" + comboBox1.Text.Trim() + "";
        com = new OleDbCommand(str, con);
        OleDbDataReader reader = com.ExecuteReader();
            if (reader.Read())
            {
                textBox1.Text = reader["regis_no"].ToString();
                textBox2.Text = reader["comp_oner"].ToString();
                textBox3.Text = reader["comp_name"].ToString();
                textBox4.Text = reader["comp_add"].ToString();
                textBox5.Text = reader["tin_no"].ToString();
                textBox6.Text = reader["email"].ToString();
             }

            con.Close();
            reader.Close();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
 public static void DeleteLine(string kv) {
      OleDbConnection myConnection = GetConnection();
      string myQuery = "DELETE FROM Cloth WHERE [ClothName] = '" + kv + "'" ;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM