我正在使用带有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())
答案 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);
}