0

我正在做一个预订系统。

在插入数据库之前,我无法弄清楚一系列数据的验证算法。主键将是系统自动生成的预订 ID。

我需要验证 bdate、btime 和 sname。(bdate=预订时间,btime=预订时间,sname=员工姓名)

在 bdate、btime 和 sname 的情况下,与客户端输入的内容相同。由于员工已经在同一日期和时间进行了预订,因此系统将提醒其重复。

请在下面找到我的插入查询,并感谢您能指出我正确的方法。

 private void btn_save_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        //query for duplicate
        cmd.CommandText = "select count(*) from Booking where sname = @newName and bdate = @newDate and btime = @newTime";
       // cmd.Parameters.Add("@newName", OleDbType.VarChar).Value = txt_cname.Text;
        //cmd.Parameters.Add("@newDate", OleDbType.DBDate).Value = dtp_bdate.Value.Date;
       // cmd.Parameters.Add("@newTime", OleDbType.VarChar).Value = dtp_btime.Value.ToString("hh:mm tt");

        cmd.CommandText = "insert into Booking(cname, bdate, btime, ccontact, sname) Values('" + txt_cname.Text + "','" + dtp_bdate.Value.Date + "','" + dtp_btime.Value.ToString("hh:mm tt") + "','" + txt_ccontact.Text + "','" + txt_sname.Text + "')";
        cmd.Connection = myCon;
        myCon.Open();

        int recordCount = Convert.ToInt32(cmd.ExecuteScalar());

        myCon.Close();

        if (recordCount>0)

        {
            // handle duplicates
            MessageBox.Show("Duplicated", "My Application",
            MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
        }

       // cmd.Connection = myCon;
        //myCon.Open();
       //cmd.ExecuteNonQuery();
        //myCon.Close();
        //MessageBox.Show(dtp_bdate.Value.ToString());
        //MessageBox.Show("Booking completed", "My Application",
       // MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
    }
4

4 回答 4

2
    private bool RecordExists(string name, DateTime date, string time)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        //query for duplicate
        cmd.CommandText = "select count(*) from Booking where sname = @newName and bdate = @newDate and btime = @newTime";
        cmd.Parameters.Add("@newName", OleDbType.VarChar).Value = txt_cname.Text;
        cmd.Parameters.Add("@newDate", OleDbType.DBDate).Value = dtp_bdate.Value.Date;
        cmd.Parameters.Add("@newTime", OleDbType.VarChar).Value = dtp_btime.Value.ToString("hh:mm tt");

        myCon.Open();

        int recordCount = Convert.ToInt32(cmd.ExecuteScalar());

        myCon.Close();

        return recordCount > 0;
    }

    private void btn_save_Click(object sender, EventArgs e)
    {
        if (RecordExists(txt_cname.Text, dtp_bdate.Value.Date, dtp_btime.Value.ToString("hh:mm tt"))
        {
            MessageBox.Show("Duplicated", "My Application", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
            return;
        }

        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = "insert into Booking(cname, bdate, btime, ccontact, sname) Values(@newName, @newDate, @newTime, @newContact, @newSName)";
        cmd.Parameters.Add("@newName", OleDbType.VarChar).Value = txt_cname.Text;
        cmd.Parameters.Add("@newDate", OleDbType.DBDate).Value = dtp_bdate.Value.Date;
        cmd.Parameters.Add("@newTime", OleDbType.VarChar).Value = dtp_btime.Value.ToString("hh:mm tt");
        cmd.Parameters.Add("@newContact", OleDbType.VarChar).Value = txt_ccontact.Text;
        cmd.Parameters.Add("@newSName", OleDbType.VarChar).Value = txt_sname.Text;

        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();

        MessageBox.Show(dtp_bdate.Value.ToString());
        MessageBox.Show("Booking completed", "My Application", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
    }
于 2012-06-15T09:04:56.870 回答
1

您需要在执行插入之前检查预订是否存在,因此您需要添加一个额外的步骤:

OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;

cmd.CommandText = "select count(*) from booking where cname = @newName and bdate = @newDate and ctime = @newTime";

cmd.Parameters.Add("@newName", OleDbType.VarChar).Value = txt_cname.Text;
cmd.Parameters.Add("@newDate", OleDbType.DBDate).Value = dtp_bdate.Value.Date;
cmd.Parameters.Add("@newTime", OleDbType.VarChar).Value = dtp_btime.Value.ToString("hh:mm tt");

cmd.Connection = myCon;
myCon.Open();

int recordCount = Convert.ToInt32(cmd.ExecuteScalar());

myCon.Close();

if (recordCount>0)
{
    // handle duplicates
}

当您执行此操作时,它将返回匹配的行数,如果这是 1 或更多,那么您应该调用您的重复逻辑。

编辑以更正代码

于 2012-06-12T16:16:54.397 回答
0

要检查是否存在现有字段,您可以创建一个Select然后进行比较:

bool InfoRepeated()
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = string.Format("SELECT cname FROM yourTable;");
        cmd.Connection = myCon;
        myCon.Open();
        try
        {
            OleDbDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                if (txt_cname.Text.Equals((rdr[0].ToString())))
                {
                    myCon.Close();
                    return true;
                }
            }
            myCon.Close();
            return false;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
            myCon.Close();
            return false;
        }
    }

让我知道它是否有效或您收到的错误。

于 2012-06-12T16:19:36.330 回答
0

工作有用的代码试试这个

BOMaster obj_data = new BOMaster();

obj_data.productid = tempid;
obj_data.categoryid =int.Parse(cmbcategory.SelectedValue.ToString());
obj_data.productcode = txtproductcode.Text;
obj_data.productname = txtproductname.Text;
obj_data.mqty = decimal.Parse(txtmqty.Text.ToString());

OleDbCommand mycmd = new OleDbCommand("select * from productmaster where productname=?", new OleDbConnection(Common.cnn));
BOMaster obj_datan = new BOMaster();

mycmd.Parameters.Add(new OleDbParameter("productname", txtproductname.Text));
mycmd.Connection.Open();

OleDbDataReader myreader = mycmd.ExecuteReader(CommandBehavior.CloseConnection);

if (myreader.HasRows == true)
{
    // savestutus = "false";
    MessageBox.Show("Product Name Already Exist", "Product", MessageBoxButtons.OK, MessageBoxIcon.Information);
    txtproductname.Focus();
    return;
}
mycmd.Connection.Close();

ProductDAL obj_dal = new ProductDAL();

if (obj_dal.Save(obj_data))
{
    Clear();
}
于 2013-04-08T09:36:09.983 回答