0

我正在编写 ac# 程序并使用 SQL Server 作为数据库。

我正在运行一个INSERT, SELECT, 并UPDATE紧随其后。前两个语句运行正常,但最后一个UPDATE语句将运行一次,但当它第二次运行时,它将冻结程序并在 30 秒左右后出现此错误:

System.Data.SqlClient.SqlException:'执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。
该语句已终止。
内部异常
Win32Exception:等待操作超时

这是我的连接字符串:

private const string constr = @"Data Source=MSI\SQLEXPRESS;Initial Catalog=DatabaseHuskyCenter;Integrated Security=True ;MultipleActiveResultSets=True";

这是库存表:

USE [DatabaseHuskyCenter]
GO

/****** Object:  Table [dbo].[Inventory]    Script Date: 12/21/2020 20:07:09 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Inventory](
    [IDinventory] [nvarchar](50) NOT NULL,
    [IDitem] [nvarchar](50) NULL,
    [quantity] [int] NULL,
 CONSTRAINT [PK_Inventory] PRIMARY KEY CLUSTERED 
(
    [IDinventory] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Inventory]  WITH CHECK ADD  CONSTRAINT [FK_Inventory_Items] FOREIGN KEY([IDitem])
REFERENCES [dbo].[Items] ([IDitem])
GO

ALTER TABLE [dbo].[Inventory] CHECK CONSTRAINT [FK_Inventory_Items]
GO

这是我运行三个查询的应用程序代码:

int quan = 1;
            int m=0;
            string tag = ((PictureBox)sender).Tag.ToString();
            sqlcon = new Connection();
            sqlcon.cmd = new SqlCommand("select * from Inventory,Items where Inventory.IDitem = Items.IDitem and Items.IDitem like '" + tag + "'", sqlcon.con);
            sqlcon.dr = sqlcon.cmd.ExecuteReader();
            sqlcon.dr.Read();
            if (sqlcon.dr.HasRows)
            {
                sqlcon.cmd = new SqlCommand("INSERT INTO SellActions(ID,IDsell,IDitem,IDuser,buyerName,[Date],quantityyy,[index])values(@id,@idsell,@iditem,@iduser,@buyer,@date,@quan,@index)", sqlcon.con);
                sqlcon.cmd.Parameters.AddWithValue("@id", sqlcon.SellActionCode());
                sqlcon.cmd.Parameters.AddWithValue("@idsell",codeTxt.Text);
                sqlcon.cmd.Parameters.AddWithValue("@iditem", tag);
                sqlcon.cmd.Parameters.AddWithValue("@iduser", sqlcon.getUserID());
                sqlcon.cmd.Parameters.AddWithValue("@buyer", nameTxt.Text);
                sqlcon.cmd.Parameters.AddWithValue("@date", dateandtime.Dateshort());
                sqlcon.cmd.Parameters.AddWithValue("@quan", quan);
                sqlcon.cmd.Parameters.AddWithValue("@index", index++); 
                try
                {
                    sqlcon.cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK);
                    throw;
                }
                sqlcon.cmd.Dispose();

                SqlCommand find = new SqlCommand("select quantity from Inventory where IDitem = '" + tag+ "'", sqlcon.con);
                try
                {
                    sqlcon.dr = find.ExecuteReader();
                    while (sqlcon.dr.Read())
                    {
                        m =sqlcon.dr.GetInt32(0);
                    }
                    sqlcon.dr.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    throw;
                }
                find.Dispose();
                sqlcon.dr.Close();
                m -= quan;
                MessageBox.Show(m.ToString());
                if (sqlcon.con.State == ConnectionState.Closed)
                {
                    sqlcon.con.Open();
                }
                sqlcon.cmd = new SqlCommand("update Inventory set quantity=@quantity where IDitem = @tag", sqlcon.con);
                sqlcon.cmd.Parameters.AddWithValue("@tag", tag.ToString());
                sqlcon.cmd.Parameters.AddWithValue("@quantity", m.ToString());

                try
                {
                    sqlcon.cmd.ExecuteNonQuery();
                    sqlcon.cmd.Dispose();
                    sqlcon.con.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK);
                    throw;
                }
                Clear();
                getData();
            }
            sqlcon.dr.Close();
            ItemLimit++;

它相当混乱,对此感到抱歉,但问题发生在这里

if (sqlcon.con.State == ConnectionState.Closed)
                {
                    sqlcon.con.Open();
                }
                sqlcon.cmd = new SqlCommand("update Inventory set quantity=@quantity where IDitem = @tag", sqlcon.con);
                sqlcon.cmd.Parameters.AddWithValue("@tag", tag.ToString());
                sqlcon.cmd.Parameters.AddWithValue("@quantity", m.ToString());

                try
                {
                    sqlcon.cmd.ExecuteNonQuery();
                    sqlcon.cmd.Dispose();
                    sqlcon.con.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK);
                    throw;
                }

这是错误的图像:

错误

4

0 回答 0