2017-09-04 3 views
-2

コードをデータベースに送信してコードをデータベースに送信し、コードをデータベースに送信して、データベースに挿入しているのですが、それがあれば更新する必要があります。私は下に自分のコードを残すので、あなたが手助けするのがより簡単にできます。より多くのコードが必要な場合は、お気軽にお問い合わせください。特定のデータが既にデータベースであるかどうかを確認し、データがある場合はデータを更新する

try 
{ 
conn.Open(); 
string sqlQuerry = @"INSERT INTO UXMenu(TransDocument, TransSerial, TransDocNumber, PartyName, PartyLocalityID, TotalAmount, ShipToPostalCode, Estado , IDZona ,Bonus,NumFac) VALUES (@transdocument, @transserial, @transdocnumber, @partyname, @partylocal, @totalamount, @shiptocode, @estado ,@IDZona ,@Bonus,@NumFac)"; 
SqlCommand SQLcm = new SqlCommand(); 
SQLcm.Connection = conn; 
SQLcm.CommandText = sqlQuerry; 
SQLcm.CommandType = CommandType.Text; 
SQLcm.Parameters.AddWithValue("@transdocument", transdocument); 
SQLcm.Parameters.AddWithValue("@transserial", transserial); 
SQLcm.Parameters.AddWithValue("@transdocnumber", transaction.TransDocNumber); 
SQLcm.Parameters.AddWithValue("@partyname", nomecli); 
SQLcm.Parameters.AddWithValue("@partylocal", locality); 
SQLcm.Parameters.AddWithValue("@totalamount", transaction.TotalAmount); 
SQLcm.Parameters.AddWithValue("@shiptocode", shipto); 
SQLcm.Parameters.AddWithValue("@estado", estado); 
SQLcm.Parameters.AddWithValue("@IDZona", "0"); 
SQLcm.Parameters.AddWithValue("@Bonus", "0"); 
SQLcm.Parameters.AddWithValue("@NumFac", "0"); 
SQLcm.ExecuteNonQuery(); 
MessageBox.Show("inseriu dados"); 
conn.Close(); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 
} 

UPDATE 1:これは私がテーブルを作成する方法です

using (SqlConnection conn = new SqlConnection(ConecçãoDB)) 
{ 
    conn.Open(); 
    SqlCommand command = new SqlCommand("IF OBJECT_ID('UXMenu', 'U') IS NULL CREATE TABLE UXMenu(TransDocument varchar(5), TransSerial varchar(5), TransDocNumber float PRIMARY KEY, PartyName varchar(60), PartyLocalityID varchar(5), TotalAmount varchar(25), ShipToPostalCode varchar(35), Estado int, IDZona varchar(15),Bonus varchar(15),NumFac varchar(15));", conn); 
    command.ExecuteNonQuery(); 
    MessageBox.Show("tabela criada menu"); 
    conn.Close(); 
+1

を行います、INSERTを行います、私はあなたがキーを持つ行が存在するかどうかをチェックし、 'UPDATE'または' INSERTを実行するストアドプロシージャを使用するには良い解決策を見つけますそれによると。 –

+0

個人的には、私は変更履歴を持つのが好きです。だから私は、タイムスタンプを追加し、実際のタイムスタンプだけを挿入します。選択するときは、各エントリの最新のタイムスタンプをフィルタリングします(またはそれに応じてビューを作成します)。これは簡単な「元に戻す」と「誰がいつ、いつ、どのように変更したか」を容易にします。 – Fildor

+0

個人的には、主キーを使って複雑なチェックを含む 'AddOrUpdate'メソッドを書いて、* local *データベースにアイテムがすでに存在するかどうかをチェックし、挿入または更新する方法を書いています。 – Sinatr

答えて

0

あなたのDBスキーマ&サンプルデータを投稿していないので、私はあなたを実行するためのクエリを与えることはできません。

ただし、実行する内容は、MERGEステートメントを使用してSQL Serverで達成できます。

UPSERTの文も非常に一般的ですが、言語サポートはありません。&を2ステップで実行する必要がありました。

MERGEを使用すると、ソース表との結合の結果に基づいて、ターゲット表のUPDATE,INSERTまたはDELETEを達成できます。

ドキュメントはここhttps://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql

で発見することができますが、あなたのテーブルスキーマの基本的な例です。

2回実行します。最初の実行は、セカンドランが個人的にUPDATE

IF OBJECT_ID('UXMenu', 'U') IS NULL CREATE TABLE UXMenu(TransDocument varchar(5), TransSerial varchar(5), TransDocNumber float PRIMARY KEY, PartyName varchar(60), PartyLocalityID varchar(5), TotalAmount varchar(25), ShipToPostalCode varchar(35), Estado int, IDZona varchar(15),Bonus varchar(15),NumFac varchar(15)); 

DECLARE @TargetTransDocNumber float=1; 

SELECT * FROM UXMenu; 

MERGE UXMenu AS target 
USING 
(
    SELECT @TargetTransDocNumber as TransDocNumber 
) AS source 
ON (target.TransDocNumber = source.TransDocNumber) 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT(TransDocument, TransSerial, TransDocNumber, PartyName, PartyLocalityID, TotalAmount, ShipToPostalCode, Estado, IDZona, Bonus, NumFac) 
    VALUES('doc1', 'ser1', @TargetTransDocNumber, 'par1', 'ploc1', 'totamt1', 'postal1', 1, 'zon1', 'bon1', 'fac1') 
WHEN MATCHED THEN 
    UPDATE SET 
     target.TransDocument = 'doc2', 
     target.TransSerial='ser2', 
     target.PartyName='par2', 
     target.PartyLocalityID='ploc2', 
     target.TotalAmount='totamt2', 
     target.ShipToPostalCode='postal2', 
     target.Estado=2, 
     target.IDZona='zon2', 
     target.Bonus='bon2', 
     target.NumFac='fac2'; 

SELECT * FROM UXMenu; 
+0

質問を更新しました。 –

関連する問題