insert with stored procedure抛出EntityCommandExecutionException

时间:2015-06-08 17:11:04

标签: c# stored-procedures

当我尝试使用存储过程插入项目时,我得到一个EntityCommandExecutionException,不,我不想用存储过程填充表。

namespace Diplomverwaltung
{
    /// <summary>
    /// Interaktionslogik für erstellen.xaml
    /// </summary>
    public partial class erstellen : Window
    {

        Entities6 db = new Entities6();

        public erstellen()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

            int hauptv = int.Parse(hauptverantwortlich.Text);
            int abteilungg = int.Parse(abteilung.Text);
            String schwerpunktt = schwerpunkt.Text;

            if (hauptv != null && abteilungg != null && schwerpunktt != null)
            {
                db.DiplomprojektInsert(abteilungg, schwerpunktt, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, true, 905417, hauptv);
            }

        }

    }
}

enter image description here

存储过程:

USE [5abifdiplomdb]
GO
/****** Object:  StoredProcedure [dbo].[DiplomprojektInsert]    Script Date: 08.06.2015 19:06:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[DiplomprojektInsert]
    @Di_Abteilung int,
    @Di_Ausbildungsschwerpunkt nvarchar(250),
    @Di_Titel nvarchar(250),
    @Di_Untertitel nvarchar(250),
    @Di_Aufgabenstellung nvarchar(400),
    @Di_Zielsetzung nvarchar(400),
    @Di_geplantes_Ergebnis nvarchar(400),
    @Di_Meilenstein nvarchar(200),
    @Di_Rechtliche_Regelung nvarchar(200),
    @Di_Praesentationsname nvarchar(250),
    @Di_Titel_Englisch nvarchar(250),
    @Di_Zusammenfassung nvarchar(400),
    @Di_Zusammenfassung_Englisch nvarchar(400),
    @Di_Typ nchar(1),
    @Di_Stichwoerter nvarchar(200),
    @Di_Stichwoerter_Englisch nvarchar(200),
    @Di_Link_Projektseite nvarchar(100),
    @Di_Umfeld nvarchar(400),
    @Di_Sperrvermerk bit,
    @Di_Schule int,
    @schuelerhauptverantwortlich int
    --   hier noch andere Felder überlegen   (zumindest betreuer (ist anlegender), schüler hauptverantwortlich)
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON  

    declare @diid int

    declare @zurueck  nvarchar(250)  -- aufnehmen fehler bzw. neue id

    declare @fehler nvarchar(250)


    -- prüfe Voraussetzungen
    set @fehler  = null
    if not exists (select 1 from AktBenutzer inner join tbenutzer on akb_Benutzerid = Ben_id where Ben_Benutzerart in('Betreuer') )
    begin
        set @fehler = coalesce(@fehler + '/','') + 'Anlegender Benutzer muss ein Betreuer sein'
    end
    if not exists (select 1 from tAbteilungen inner join AktBenutzer on Abt_Schule = Akb_Schule where Abt_ID = @Di_Abteilung )
    begin
        set @fehler = coalesce(@fehler + '/','') + 'Abteilung leer oder nicht Schule des Benutzers'
    end
    if not exists (select 1 from tAbteilungen inner join AktBenutzer on Abt_Schule = Akb_Schule 
                                              inner join tSchulen on Abt_Schule = Sch_Kennzahl
                                          where Abt_ID = @Di_Abteilung and Abt_Schule = @Di_Schule )
    begin
        set @fehler = coalesce(@fehler + '/','') + 'Schule leer oder nicht Schule des Benutzers'
    end 
    if not exists (select 1 from tAbteilungen inner join AktBenutzer on Abt_Schule = Akb_Schule 
                                              inner join tSchulen on Abt_Schule = Sch_Kennzahl
                                          where Abt_ID = @Di_Abteilung and Abt_Schule = @Di_Schule and
                                                Sch_Direktor is not null and Sch_Lsi is not null )
    begin
        set @fehler = coalesce(@fehler + '/','') + 'Schule hat  keinen Direktor bzw. Lsi'
    end     
    if @Di_Titel is null
    begin
        set @fehler = coalesce(@fehler + '/','') + 'Pflichtfelder (Titel) fehlen'
    end     

    -- weiteres  @schuelerhauptverantwortlich leer oder ein schüler der schule

    if @fehler is not null   -- dann tschüss
    begin
        set @fehler = 'ERROR - ' + @fehler
        RAISERROR (@fehler, 16, 1);
        return
    end 


    BEGIN TRAN

    INSERT INTO [dbo].[tDiplomprojekte] 
          ( Di_Abteilung,  Di_Ausbildungsschwerpunkt,  Di_Titel, [Di_Untertitel], [Di_Aufgabenstellung], [Di_Zielsetzung], [Di_geplantes_Ergebnis],
            Di_Meilenstein, [Di_Rechtliche_Regelung], [Di_Praesentationsname], [Di_Titel_Englisch], [Di_Zusammenfassung], [Di_Zusammenfassung_Englisch],
            Di_Typ,  Di_Stichwoerter, [Di_Stichwoerter_Englisch], [Di_Link_Projektseite], [Di_Umfeld], [Di_Sperrvermerk], [Di_Schule])
    SELECT @Di_Abteilung, @Di_Ausbildungsschwerpunkt, @Di_Titel, @Di_Untertitel, @Di_Aufgabenstellung, @Di_Zielsetzung, @Di_geplantes_Ergebnis,
           @Di_Meilenstein, @Di_Rechtliche_Regelung, @Di_Praesentationsname, @Di_Titel_Englisch, @Di_Zusammenfassung, @Di_Zusammenfassung_Englisch,
           @Di_Typ, @Di_Stichwoerter, @Di_Stichwoerter_Englisch, @Di_Link_Projektseite, @Di_Umfeld, @Di_Sperrvermerk, @Di_Schule

    set @diid = SCOPE_IDENTITY()

    -- hier muss der erste Status geschrieben werden         tDiplschritte
    insert into  tDiplschritte 
          (Dis_Diplomprojekt, Dis_Ablaufschritt, Dis_Start, Dis_Ende, Dis_Ben_ID)

    Values(@diid,  (select top 1 as_id from tAblaufschritte order by As_Order),    -- 1. Schritt via Order
                                                 getdate(), null,  
                                                                      (select Akb_BenutzerID from aktbenutzer)   )

    -- hier müssen benutzerzurdnungen geschrieben werden     tDiplbens
    insert into tDiplBens (Dib_Diplomprojekt,Dib_Benutzer,Dib_Isthauptverantwortlich)   -- Betreuer
              values      (@diid, (select Akb_BenutzerID from aktbenutzer), 1)
    insert into tDiplBens (Dib_Diplomprojekt,Dib_Benutzer,Dib_Isthauptverantwortlich)   -- AV 
              values      (@diid, (select Abt_AV from tAbteilungen
                                    where Abt_ID = @Di_Abteilung), 1)
    insert into tDiplBens (Dib_Diplomprojekt,Dib_Benutzer,Dib_Isthauptverantwortlich)   -- Dir
              values      (@diid, (select Sch_Direktor from tschulen 
                                    where Sch_Kennzahl = @Di_Schule), 1)
    insert into tDiplBens (Dib_Diplomprojekt,Dib_Benutzer,Dib_Isthauptverantwortlich)   -- Lsi
              values      (@diid, (select Sch_lsi from tschulen 
                                    where Sch_Kennzahl = @Di_Schule), 1)    

    if   @schuelerhauptverantwortlich is not null
    begin
    insert into tDiplBens (Dib_Diplomprojekt,Dib_Benutzer,Dib_Isthauptverantwortlich)   -- Schüler hauptv.
              values      (@diid, @schuelerhauptverantwortlich, 1)          
    end

    -- Begin Return Select <- do not remove
    SELECT [Di_ID], [Di_Abteilung], [Di_Ausbildungsschwerpunkt], [Di_Titel], [Di_Untertitel], [Di_Aufgabenstellung], [Di_Zielsetzung], [Di_geplantes_Ergebnis], 
           [Di_Meilenstein], [Di_Rechtliche_Regelung], [Di_Praesentationsname], [Di_Titel_Englisch], [Di_Zusammenfassung], [Di_Zusammenfassung_Englisch],
           [Di_Typ], [Di_Stichwoerter], [Di_Stichwoerter_Englisch], [Di_Link_Projektseite], [Di_Umfeld], [Di_Sperrvermerk], [Di_Schule]
    FROM   [dbo].[tDiplomprojekte]
    WHERE  [Di_ID] = @diid
    -- End Return Select <- do not remove

    COMMIT

0 个答案:

没有答案