访问查询中IF EXISTS的替代方法

djasy3

我正在使用C#和Access数据库在ASP.NET中开发网站,但是在使用需要检查的查询时遇到了麻烦:

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

我有Access中不接受的SQL代码。我想知道是否还有其他方法可以使它访问,或者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())
汤普森(Gord Thompson)

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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章