0

値を事前チェックするためのプログラムを作成したいと考えています。ユーザーは単一の入力 (wbslement no) を UI に与えます。そのレコードを 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

ストアド プロシージャで直接確認することをお勧めします。

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

テーブル自体に「一意の」キー制約を作成するだけです。MySQL には、これを処理するための既存の構造が既にあるため、コードで行う意味はありません。

于 2012-06-11T06:47:40.227 に答える
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 !";
}

または

database を 2 回個別に呼び出す代わりに、ストアド プロシージャ内で重複をチェックできます。

于 2012-06-11T06:44:00.280 に答える
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 に答える