在数据库中找到MAX()并加1

时间:2015-02-19 17:42:24

标签: c# mysql

        int hid = 0;
        int hid_auto = 0;
        //Đổ dữ liệu
        //HID
        if (conn_class.OpenConnection() == true)
        {
            MySqlCommand hid_sql = new MySqlCommand("SELECT MAX(hid) FROM hotel", conn_class.connection);
            hid = Convert.ToInt16(hid_sql.ExecuteScalar());
            hid_auto = hid + 1;

            conn_class.CloseConnection();
        }
        txt_Hid.Text = hid_auto.ToString();
//code that insert new record into database successfully

....... 更新:插入声明

if (general.TestEmail.IsEmail(txt_Email.Text) == true)
            {
                //Insert dữ liệu vào database
                email = txt_Email.Text;
                MySqlCommand them_hotel = new MySqlCommand("INSERT INTO quan_li.hotel (hid, name, star, address, province, phone, fax, email) VALUES (@hid, @name, @star, @address, @province, @phone, @fax, @email)");
                them_hotel.CommandType = CommandType.Text;
                them_hotel.Connection = conn_class.connection;
                them_hotel.Parameters.AddWithValue("@hid", txt_Hid.Text);
                them_hotel.Parameters.AddWithValue("@name", txt_Ten.Text);
                them_hotel.Parameters.AddWithValue("@star", txt_Sao.Text);
                them_hotel.Parameters.AddWithValue("@address", txt_DiaChi.Text);
                them_hotel.Parameters.AddWithValue("@province", txt_Tinh.Text);
                them_hotel.Parameters.AddWithValue("@phone", txt_DienThoai.Text);
                them_hotel.Parameters.AddWithValue("@fax", txt_Fax.Text);
                them_hotel.Parameters.AddWithValue("@email", txt_Email.Text);

                conn_class.OpenConnection();
                them_hotel.ExecuteNonQuery();
                conn_class.CloseConnection();
                thanh_cong = "Đã thêm khách sạn thành công";
            }

我想找到列hid的MAX()值然后加1并发送到文本框。此事件在按钮中,但第二次按下该按钮时,该值始终显示为第一次按下按钮。

例: 1st:MAX()= 9 - > +1 - > 10在文本框中。 - >将10插入数据库 第二个... n:10在文本框中,10个插入数据库(2行具有相同的值)。

如何从数据库中的MAX()值+1?

谢谢你的帮助。

P / s:抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

如果您正在计算geting max并为其添加一个,然后将其保存回dB只是为了将主要密钥保存回来并增加一个值,那么您应该选择AUTO-INCREMENT LIKE。它的语法如下:

CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)

它将自动将值保存到该字段,增量为1,并在保存新记录时保存,在保存为dB时,不需要在查询中传递该自动增量fild。

答案 1 :(得分:0)

我读了你写的所有内容,包括在评论中。

您看起来有一个表单,其中包含与表中的hid字段相关的字段。您正试图向正在使用该表单的人显示下一个ID(hid)的值。

好吧,你可以显示ID(hid)的值,但是知道你的表有一个自动增量的隐藏,那么你不需要在插入时包含字段hid。

应该是这样的:

if (general.TestEmail.IsEmail(txt_Email.Text) == true)
{
    //Insert dữ liệu vào database
    email = txt_Email.Text;
    MySqlCommand them_hotel = new MySqlCommand("INSERT INTO quan_li.hotel (name, star, address, province, phone, fax, email) VALUES (@name, @star, @address, @province, @phone, @fax, @email)");
    them_hotel.CommandType = CommandType.Text;
    them_hotel.Connection = conn_class.connection;
    //them_hotel.Parameters.AddWithValue("@hid", txt_Hid.Text);
    them_hotel.Parameters.AddWithValue("@name", txt_Ten.Text);
    them_hotel.Parameters.AddWithValue("@star", txt_Sao.Text);
    them_hotel.Parameters.AddWithValue("@address", txt_DiaChi.Text);
    them_hotel.Parameters.AddWithValue("@province", txt_Tinh.Text);
    them_hotel.Parameters.AddWithValue("@phone", txt_DienThoai.Text);
    them_hotel.Parameters.AddWithValue("@fax", txt_Fax.Text);
    them_hotel.Parameters.AddWithValue("@email", txt_Email.Text);

    conn_class.OpenConnection();
    them_hotel.ExecuteNonQuery();
    conn_class.CloseConnection();
    thanh_cong = "Đã thêm khách sạn thành công";
}