Avatar billede CJCJCJ Nybegynder
06. april 2012 - 12:44 Der er 4 kommentarer og
1 løsning

Tjek om data allerede er i anden tabel inden opdatering

Hej

Jeg har brug for en programstump, som skal tjekke om en værdi i en tabel (SQL-Northwind) allerede eksistere. Hvis den ikke gør, så skal der gives en besked om, at den skal oprettes og og "scriptet" stopper. Hvis værdien allerede eksistere, så skal "scriptet" køre videre og en anden tabel skal opdateres med indtastede værdier.

Jeg har indsat "script" hvor Kvalfi opdateres, men jeg skal have tilføjet programstump, hvor der skal kontrolleres i tabellen om "KursusKode" førend opdatering kan ske:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Opgave7_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(@"
            data source = .\sqlexpress;
            integrated security = true;
            database = Northwind
            ");

            //Insert statement
            string sqlins = @"
                insert into Kvalfi(PersonaleNummer, KursusKode,År)
                values(@PersonaleNummer, @KursusKode, @År) ";

            SqlTransaction sqltrans = null;

            try
            {
                // open connection
                conn.Open();

                //begin transaction
                sqltrans = conn.BeginTransaction();

                // create inser command
                SqlCommand cmdins = conn.CreateCommand();
                cmdins.CommandText = sqlins;
                cmdins.Transaction = sqltrans;
                cmdins.Parameters.Add("@PersonaleNummer",
                System.Data.SqlDbType.NVarChar, 4);
                cmdins.Parameters.Add("@KursusKode",
                System.Data.SqlDbType.NVarChar, 5);
                cmdins.Parameters.Add("@År",
                System.Data.SqlDbType.NVarChar, 4);

                // add customer
                cmdins.Parameters["@PersonaleNummer"].Value = textBox1.Text;
                cmdins.Parameters["@KursusKode"].Value = textBox2.Text;
                cmdins.Parameters["@År"].Value = textBox3.Text;
                cmdins.ExecuteNonQuery();

                //COMMIT TRANSACTION
                sqltrans.Commit();

                // NO EX, TRANS COMMITTED, GIVE MESSAGE
                MessageBox.Show("Transaction committed");
            }

            catch (System.Data.SqlClient.SqlException ex)
            {
                //roll back transaction
                sqltrans.Rollback();

                MessageBox.Show(
                    "Transaction rolled back\n" + ex.Message,
                    "Rollback Transaction");
            }

            catch (System.Exception ex)
            {
                MessageBox.Show("System Error\n" + ex.Message, "Error");
            }
            finally
            {
                //close connection
                conn.Close();
            }


     
        }
    }
Avatar billede arne_v Ekspert
06. april 2012 - 15:06 #1
Var det ikke bedst at definere tabel struktur med en constraint saa databasen enforcer referentiel integritet og saa bare lave en insert og lade den fejler hvis der mangler en referance?
Avatar billede CJCJCJ Nybegynder
07. april 2012 - 08:33 #2
Hej Arne
Tak for svaret, kunne du give et eksempel på din løsning? Hvad betyder "referentiel integritet"?
Avatar billede arne_v Ekspert
07. april 2012 - 15:02 #3
http://msdn.microsoft.com/en-us/library/ms175464.aspx

forklarer lidt om det.

Kort sagt beder man databasen rejecte INSERT hvis det man indsaetter peger paa nogt som ikke eksisterer i en anden tabel.
Avatar billede CJCJCJ Nybegynder
07. april 2012 - 15:36 #4
Hej Arne,

tak for linket!
Avatar billede arne_v Ekspert
07. april 2012 - 18:21 #5
det tager jeg som en opfordring til at smide et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester