2016-02-06 61 views
0

我有表数据库按钮用于更新数据库无法正常工作

  • dbo.auctions[id][productid][lastbider][bidvalue][lastbid]
  • dbo.products[id][name]
  • dbo.users[id][name][password][bids]

我需要编写,检查是否[bids]是大于0

如果它是一个程序,[lastbid]被更新并且[bidvalue]被添加到它,像lastbid = lastbid + bidvalue,和[bids]由1,bids = bids - 1降低。我需要连接到ButtonVisual Studio

我写了这个过程:

ALTER PROCEDURE [dbo].[usp_makebid] (
    @userid int, @auctionid int 
) 


AS 
DECLARE @bids int, @lastbid int 
SELECT @bids = COUNT (*) 
FROM users 
WHERE users.id = @userid 

IF @bids > 0 
BEGIN 
    UPDATE auctions 
    SET lastbid = @lastbid + bidvalue 
    WHERE id = @auctionid 
     AND lastbid = @lastbid 
    UPDATE users 
    SET bids = @bids - 1 
    WHERE bids = @bids 
    END 

,并连接到Button

protected void Button1_Click(object sender, EventArgs e) 
{ 

     using (var con = new SqlConnection(@"data source=JOVAN-PC;database=aukcija_jovan_gajic;integrated security=true")) 
     { 
      con.Open(); 
      var userid = 1; 
      var auctionid = 2; 


      var cmd = new SqlCommand("usp_makebid", con); 
      cmd.Parameters.AddWithValue("@userid", userid); 
      cmd.Parameters.AddWithValue("@auctionid", auctionid); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
    } 
} 

但是当我按一下按钮,没有任何反应。

首页看起来是这样,也许可以给你的总体思路:

enter image description here

+0

尝试调试应用程序;使用try/catch来识别错误... –

+0

如何更新数据库没有传递userid和auctionid值? – RajeeshMenoth

回答

0

值传递的用户名和auctionid然后更新您的表..

例子:

int userid = 456789; 
int auctionid = 12345; 

cmd.Parameters.AddWithValue("@userid", SqlDbType.Int).Value = userid; 
cmd.Parameters.AddWithValue("@auctionid", SqlDbType.Int).Value = auctionid; 
+0

你应该看看[我们可以停止使用AddWithValue()了吗?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)并停止使用'.AddWithValue()' - 它可以导致意想不到的和令人惊讶的结果... –

0

第一个问题是您通过SqlDbType.Int enum作为0123的值和@auctionid参数,这不是你想要做的,而应该提供一个值。

第二个问题在您的存储过程中。

SELECT bids 
FROM users 
WHERE users.id = @userid 

根本没有效果,并且IF @bids > 0条件将始终为假。

猜你想获得用户接受users.id = @userid条件的号码,那么你就应该更换上述选择与

SELECT @bids = COUNT(*) 
FROM users 
WHERE users.id = @userid 

您应该结束了与以下存储过程:

ALTER PROCEDURE [dbo].[usp_makebid] 
(
    @userid INT , 
    @auctionid INT 
) 
AS 
    DECLARE @bids INT, @lastbid INT 

    SELECT @bids = COUNT(*) 
    FROM users 
    WHERE users.id = @userid 

    IF @bids > 0 
    BEGIN 
     UPDATE auctions 
     SET lastbid = @lastbid + bidvalue 
     WHERE id = @auctionid 
      AND lastbid = @lastbid 

     UPDATE users 
     SET bids = @bids - 1 
     WHERE bids = @bids 
    END 

还要注意cmd.Connection = con;行是多余的,因为Connection已经通过SqlCommand构造函数初始化。

试试这个方法:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    using (var con = new SqlConnection(@"data source=JOVAN-PC;database=aukcija_jovan_gajic;integrated security=true")) 
    { 
     con.Open(); 
     var userid = 1; 
     var auctionid = 2; 

     var cmd = new SqlCommand("usp_makebid", con); 
     cmd.Parameters.AddWithValue("@userid", userid); 
     cmd.Parameters.AddWithValue("@auctionid", auctionid); 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 
} 
+0

我做了所有这些,但仍然没有发生。我更新了我的问题,也许我在我的'Home.aspx.cs'代码中缺少了一些东西。我猜我应该把一些代码更新字符串我在'列表框中选择,但我不知道。 –

+0

@JovanGajic我看到以下行'cmd.Parameters.AddWithValue(“@ userid”,SqlDbType.Int); cmd.Parameters.AddWithValue(“@ auctionid”,SqlDbType.Int);'在你的更新答案中。当您测试我的答案时,您是否尝试删除它们? – tchelidze

+0

错误,我这样做,只是忘了更新它,我更新了其他东西。我试了你的答案,但仍然没有结果。 –