替代Access查询中的IF EXISTS

时间:2013-11-16 19:35:37

标签: c# asp.net ms-access if-statement

我正在使用带有Access数据库的C#在ASP.NET中开发一个网站,但是我在使用需要检查的查询时遇到了问题:

  • 如果表格中存在某些信息,则更新,
  • 如果没有,则插入表格

我在SQL中使用了Access中不接受的代码。我想知道是否有另一种方法来实现它,或者Access是否可以使用if exists子句的替代方法。这是SQL代码:

CREATE PROCEDURE ShoppingCartAjoutProduits
(@CartID char(36),
@ProduitID int,
@Attributs char(255))
As
IF EXISTS
(SELECT CartID
FROM ShoppingCart
WHERE ProduitID = @ProduitID AND CartID = @CartID)
UPDATE ShoppingCart
SET Quantite = Quantite + 1
WHERE ProduitID = @ProduitID AND CartID = @CartID
ELSE
IF EXISTS (SELECT titre FROM livres WHERE NumLivre = @NumLivre)
INSERT INTO ShoppingCart (CartID, ProduitID, Attributs, Quantite, DateAjoute)
VALUES (@CartID, @ProduitID, @Attributs, 1, GETDATE())

1 个答案:

答案 0 :(得分:1)

Access SQL不支持过程代码; VBA在Access中处理这个问题。但是,您始终可以使用以下内容在C#代码中执行这些操作:

using (OleDbCommand cmd = new OleDbCommand(), cmd2 = new OleDbCommand())
{
    string cartID = "Cart1";               //
    int produitID = 1;                     // test data
    string attributs = "je ne sais quoi";  //
    int numLivre = 1;                      //

    cmd.Connection = con;  // existing OleDbConnection, already .Open()
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.CommandText =
            "SELECT * FROM ShoppingCart " +
            "WHERE cartID=? AND produitID=?";
    cmd.Parameters.Add("?", OleDbType.VarWChar, 255).Value = cartID;
    cmd.Parameters.Add("?", OleDbType.Integer).Value = produitID;
    var da = new OleDbDataAdapter(cmd);
    var cb = new OleDbCommandBuilder(da);
    cb.QuotePrefix = "["; cb.QuoteSuffix = "]";
    var dt = new System.Data.DataTable("ShoppingCart");
    da.Fill(dt);
    if (dt.Rows.Count > 0)
    {
        int n = Convert.ToInt32(dt.Rows[0]["Quantite"]);
        dt.Rows[0]["Quantite"] = ++n;
    }
    else
    {
        cmd2.Connection = con;
        cmd2.CommandType = System.Data.CommandType.Text;
        cmd2.CommandText =
                "SELECT COUNT(*) AS n FROM livres WHERE NumLivre=?";
        cmd2.Parameters.AddWithValue("?", numLivre);
        int n = Convert.ToInt32(cmd2.ExecuteScalar());
        if (n > 0)
        {
            System.Data.DataRow dr = dt.NewRow();
            dr["CartID"] = cartID;
            dr["ProduitID"] = produitID;
            dr["Attributs"] = attributs;
            dr["Quantite"] = 1;
            dr["DateAjoute"] = DateTime.Today;
            dt.Rows.Add(dr);
        }
    }
    da.Update(dt);
}