0

我想制作一个用于值预检查的程序。用户将向 UI 提供单个输入(wbslement no)。我想将该记录插入到 System 中。在插入数据库之前,我想检查它是否存在于表中。如果它存在于表中,那么它不应该将记录插入到表中,如果它不存在于数据库中,那么它应该插入。

目前在加载时我正在从表中获取所有记录,之后我试图插入 System.

在我的代码中,无论如何它都是插入值

            CrCon = new SqlConnection(spcallloggin);
            CrCon.Open();
            CrCmd = new SqlCommand();
            CrCmd.Connection = CrCon;

            CrCmd.CommandText = "GetOraderNumberDetail";
            CrCmd.CommandType = CommandType.StoredProcedure;

            sqladpter = new SqlDataAdapter(CrCmd);
            ds = new DataSet();
            sqladpter.Fill(ds);
            for (int count = 0; count < ds.Tables[0].Rows.Count; count++)
            {

                if (txtwbs.Text == ds.Tables[0].Rows[count][0].ToString())
                {
                            Lbmsg.Visible = true;
                            Lbmsg.Text = "Data Already Exists !";
                            count = count + 1;
                 }
                 else
                 {
                       insetreco(val);
                 }
             }
4

4 回答 4

0

Just make a "Unique" key constraint on the table itself. MySQL already has an existing construct to handle this, so there's no point doing in your code.

于 2012-06-11T06:47:40.227 回答
0

检查这个:

根据您的需要进行更改

IF EXISTS (SELECT 1 FROM targetTable AS t
 WHERE t.empNo = @yourEmpNo
     AND t.project = @yourProject)
BEGIN
   --what ever you want to do here
END
ELSE
BEGIN
  INSERT INTO yourTable (empno, name, project)
  SELECT @empno, @name, @project
END
于 2012-06-11T07:34:42.447 回答
0

最好直接在存储过程中查看。

IF NOT EXISTS(SELECT * FROM [TABLE] WHERE unique_field = "value of the txtwbs")
BEGIN
    INSERT INTO [TABLE]
    VALUES (value1, value2, value3,...)
END

您也可以按以下方式更改代码:

bool doesExist;
for (int count = 0; count < ds.Tables[0].Rows.Count; count++)
{

    if (txtwbs.Text == ds.Tables[0].Rows[count][0].ToString())
    {
          Lbmsg.Visible = true;
          Lbmsg.Text = "Data Already Exists !";
          doesExist = true;
          break;
    }
}
if(!doesExist)
    insetreco(val);
于 2012-06-11T06:38:42.580 回答
0

您可以使用DataView 的 RowFilter来查询内存表:

Dataview dv = ds.Tables[0].DefaultView ;
dv.RowFilter="wbslement_no="+number;
if(dv.ToTable().Rows.Count==0)
{
      //insert into database 
}
else
{
       Lbmsg.Visible = true;
       Lbmsg.Text = "Data Already Exists !";
}

或者

您可以检查存储过程中的重复性,而不是对数据库进行两次单独的调用。

于 2012-06-11T06:44:00.280 回答