使用C#中的访问数据库中的递增值填充文本框

问题描述 投票:0回答:2

我创建了一个C#应用程序来查询和插入产品数据库。但是,我在这里有一个小疑问,如果有人可以帮助我,我立刻感谢你。

以下是:

  • 我有一个表单,用于将数据插入到MS Access 2007中创建的数据库中,其中包含参考值,销售号,客户端代码,客户名称,数量和位置编号;

这是我的代码,直到现在:

 private void btn_save_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=product.accdb");
        OleDbCommand check_sn = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([sn] = @sn)", con);
        OleDbCommand check_reference = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([reference] = @ref)", con);
        OleDbCommand check_number = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([number] = @num)", con);

        con.Open();
        check_reference.Parameters.AddWithValue("@ref", textBox_ref.Text);
        check_sn.Parameters.AddWithValue("@sn", textBox_sn.Text);
        check_number.Parameters.AddWithValue("@num", textBox_num.Text);

        int refExist = (int)check_reference.ExecuteScalar();
        int SNExist = (int)check_sn.ExecuteScalar();
        int numExist = (int)check_number.ExecuteScalar();


        if (refExist > 0)
        {
            MessageBox.Show("A product with this reference already exists....!");
        }
        else if (SNExist> 0)
        {
            MessageBox.Show("A product with this sale number already exists....!");
        }
        else if (numExist > 0)
        {
            MessageBox.Show("A product with this archive number already exists....!");
        }
        else
        {
            try
            {
                String reference = textBox_ref.Text.ToString();
                String sn = textBox_ov.Text.ToString();
                String cod_client = textBox_cod.Text.ToString();
                String client = textBox_cliente.Text.ToString();
                String qtd = textBox_qtd.Text.ToString();
                String number = textBox_num.Text.ToString(); //This will be the incremented number

                String my_query = "INSERT INTO product(reference,sn,cod_client,client,qtd,number)VALUES('" + reference + "','" + sn + "','" + cod_client + "','" + client + "','" + qtd + "','" + number + "')";
                OleDbCommand cmd = new OleDbCommand(my_query, con);
                cmd.ExecuteNonQuery();

                MessageBox.Show("Data saved successfully...!");

            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed due to" + ex.Message);
            }
            finally
            {

                con.Close();
            }
            cleanTextBoxes(this.Controls);
        }
    }



    private void search_btn_Click(object sender, EventArgs e)
    {
        Form search = new Form_search();

        search.Show();

        this.Hide();
    }
}

}

  • 我怎样才能这样做,而不是手动输入文本框中存档中的位置编号,它可以自动填充存档中的新位置。例如,我插入的最后一个产品在存档中位置为50,新的产品将自动为51,依此类推......此数字应自动出现在文本框中,以便用户知道新注册的数量是多少产品。

谢谢,

c# database ms-access-2007
2个回答
0
投票

好吧,我已经尝试了这个并且有效,但我现在如何增加此值+1?

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Aneis_Calibre.accdb");
        con.Open();
        OleDbDataReader myReader = null;
        OleDbCommand number = new OleDbCommand("SELECT TOP 1 [number] FROM product Order by [number] desc", con);
        myReader = number.ExecuteReader();
        while (myReader.Read())
        {

            textBox_num.Text = (myReader["number"].ToString());

        }
        con.Close();

0
投票

在您的查询中,您可能希望沿着这些方向做一些事情。

INSERT ... 
     OUTPUT inserted.identity_column
     VALUES (...)

这将返回一个带有id值的行。 SQL中的标识列将始终自动递增。这将减轻您获取最后一条记录的方法并执行:

int.TryParse(reader["..."]?.ToString(), out int id); 
textbox.Text = id++;

通过使用标量或阅读器虽然我会建议标量,如果您返回带有修改的SQL查询的单个列将导致确切的新插入的ID。

© www.soinside.com 2019 - 2024. All rights reserved.