Laden...

Forenbeiträge von Hydrogencarbonat Ingesamt 42 Beiträge

04.12.2020 - 15:59 Uhr

Hi,
danke für die Antwort.

Ist das der richtige Weg?


    <Button x:Name="btn" Grid.Row="1" Content="Start Animation" Width="Auto" HorizontalAlignment="Left"/>


  <EventTrigger RoutedEvent="Button.Click" EventTrigger.SourceName="btn">

Naja, leider kann kein "FrameworkElement" mit dem Namen "btn" gefunden werden.
Was fehlt noch?

04.12.2020 - 11:46 Uhr

Hi,
ich würde gerne per Button Click Event ein Grid sichtbar machen und wenn dies sichtbar ist dann eine Grid Animation starten (Grid from Left to Right).
Und wenn der Button erneut geklickt wird dann Close Grid from Right to left.

Ich habe schon viel rumgespielt, aber bin unfähig und brauche eure Hilfe. ^^

Ich benutze im Canvas einen EventTrigger, den benutze icch bei Loaded, aber so wird nur einmal die Animation ausgeführt bei der Init und nicht immer. Und außerdem hat der Code so keine wirkliche
Funktionalität zum Button Click Event.
Das mit der Visibility ist eh Blödsinn oder nicht?Brauche ja nur den Button Click?.
Die Funktionalität wie im Absatz oben beschrieben möchte ich gerne haben.


<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Text="Grid Silding Test" FontSize="20"/>
        <Button Grid.Row="1" Content="Start Animation" Width="Auto" HorizontalAlignment="Left" Click="Button_Click"></Button>
        <Grid Grid.Row="2" x:Name="Grid1" HorizontalAlignment="Left">
            <Canvas Grid.Row="2" Background="Transparent" x:Name="canvas" Width="250" >
                <Canvas.Triggers>
                    <EventTrigger RoutedEvent="Canvas.Loaded"> 
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetName="ControlsGrid" 
                                                                     Storyboard.TargetProperty="(Canvas.Left)"
                                                                     From="-250" To="0" Duration="0:0:0.5" />
                            </Storyboard>
                        </BeginStoryboard>

                    </EventTrigger>
                </Canvas.Triggers>
                <Grid Name="ControlsGrid" Canvas.Left="-250" Height="{Binding ElementName=canvas, Path=ActualHeight}" Width="{Binding ElementName=canvas, Path=ActualWidth}" Background="Red">
                    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="I'm a Grid......" />
                </Grid>
            </Canvas>
        </Grid>   
    </Grid>


 public MainWindow()
        {
            InitializeComponent();

            Grid1.Visibility = Visibility.Visible;
         }

  private void Button_Click(object sender, RoutedEventArgs e)
        {
            Grid1.Visibility = Grid1.Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
        }

Beste Grüße

02.04.2020 - 10:47 Uhr

Hi,

ich muss tausende von Englischen Texten in Französch übersetzen.

Damit ich nicht per Hand agieren muss, habe ich versucht die Aufgabe mit der Google Translator API (c#) zu lösen.

Bei kleinen Datenmengen hatte ich keine Probleme Texte zu übersetzen.

Da es aber sehr viele sind kommt nach einer gewissen Zeit meiner Abfragen eine Fehlermeldung und meine IP wird für eine gewissen Zeit geblockt/gesperrt.
Die Fehlermeldung besagt, dass Google einen ungewöhnlichen Datenverkehr auf meinen Computernetzwerk festgestellt hat. Eventuell sehen Sie diese Seite, weil Sie komplexe Anfragen verwenden, die bekanntermaßen von Robots verwendet werden, oder weil Sie sehr schnell Anfragen senden.

Da ich sehr schnelle Anfragen ausschließen wollte, habe ich vor jeder Anfrage ein Delay von 3 Sekunden eingebaut. Aber nach einer gewissen Zeit wurde meine Ip wieder gesperrt^^:/.

Kann man diese Fehlermeldung irgendwie umgehen?
Oder gibt es noch andere gute kostenlose Translator APIs für csharp die ich für mein Vorhaben verwenden kann?

Gruß

06.02.2020 - 14:51 Uhr

Hi ,
danke für die Hilfe.

Habe ein wenig an der richtigen Stelle getuned und es klappt.


<ScrollBar Margin="-35,0,0,0" x:Name="PART_VerticalScrollBar" Grid.Row="0" Grid.RowSpan="2" Grid.Column="0" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical"  Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>

06.02.2020 - 09:57 Uhr

Hi,

wie bekomme ich die vertikale Scollbar auf die linke Seite eines Datagrids?

Gruß

10.01.2020 - 15:02 Uhr

Hi,
ich verwende ein customize DataGridTextColumn "local:DataGridTextColumnCC " und in dem sind verschiedene Properties wie MinWidth, maxwidth etc schon voreingestellt.

Wenn ich nun die Width nachträglich auf * setze dann wurde im Vorfällt gesetzt und ich müsste davon bestimmte wieder zurück setzen. Ansonsten kann ja kein stretch erfolgen, da wie schon erwähnt die maxWidth gesetzt wurde.
Würde nur die MinWidh im vorfällt voreingestellt sein, dann hätte ich das problem ja nicht.


<local:DataGridTextColumnCC Binding="{Binding Name}" Header="Type" CanUserResize="True"  Width="*"/>

10.01.2020 - 13:48 Uhr

Super, vielen Dankes klappt.
Jedoch benutze ich in meinem richtigen Code ein Customize Datagrid.
Und da ist die Voreinstellung von MaxWidth festgelegt.
Dort wird die Spalte nicht gestretched, wenn ich Width="*" benutze.
Müsste ich um zu stretchen die Voreinstellung maxwidth zurücksetzen?
Was kann ich da tun?

In meinem kleinen Beispiel würde es wie folgt aussehen.


  <DataGridTextColumn Binding="{Binding Name}" Header="Type" CanUserResize="True" MaxWidth="100"  Width="*"/>

.

10.01.2020 - 11:56 Uhr

Hi,

ich habe es mit * probiert.
Es klappt abe rirgendwie nicht.
Hier ein kleines Beispiel:


<Window x:Class="datagrid_simple.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:datagrid_simple"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="300">
    <ScrollViewer  VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
                   PanningMode="VerticalOnly" MinWidth="300" MinHeight="500">
        <Grid   >
            <Grid.Resources>
                <ResourceDictionary>
                    <ResourceDictionary.MergedDictionaries>                       
                    </ResourceDictionary.MergedDictionaries>                    
                </ResourceDictionary>
            </Grid.Resources>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Border Grid.Row="1" BorderBrush="Green" Margin="10" BorderThickness="1" CornerRadius="3">
                <Grid Visibility="Visible" Background="WhiteSmoke">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>                      
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <DataGrid x:Name="grid1"
                             HorizontalAlignment="Stretch"
                             HorizontalContentAlignment="Stretch"
                             Margin="10"
                             VerticalAlignment="Center"
                             AlternatingRowBackground="WhiteSmoke"
                             AutoGenerateColumns="False" >                       
                        <DataGrid.Columns>
                            <DataGridTextColumn Binding="{Binding Type}" Header="Name" CanUserResize="True"  Width="Auto"/>
                            <DataGridTextColumn Binding="{Binding Name}" Header="Type" CanUserResize="True"  Width="*"/>
                        </DataGrid.Columns>                       
                    </DataGrid>
                </Grid>
            </Border>  
        </Grid>
    </ScrollViewer>   
</Window>


using System.Collections.Generic;
using System.Windows;

namespace datagrid_simple
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List<User> users = new List<User>();
            users.Add(new User() { Id = 1, Type = "Schlange", Name = "Otto" });
            users.Add(new User() { Id = 2, Type = "Fisch", Name = "Walter" });
            users.Add(new User() { Id = 3, Type = "Alien", Name = "Peter" });

            grid1.ItemsSource = users;
        }
    }

    public class User
    {
        public int Id { get; set; }

        public string Type { get; set; }

        public string Name { get; set; }
    }
}


10.01.2020 - 10:58 Uhr

Hey,
mein datagrid ist horizontal aligment = "stretch".
wie kann man die letzte Spalte von einem Datagrid stretch machen, so dass diese Spalte bis zum Ende des datagrid geht?

1.hier hat die letzte Spalte anscheinend einen festen Wert und das letzte Stück wird nicht gestretched.
||-----||-----||-----||-----||-----| |
| |
| |
2.die letzte Spalte soll bis zum Ende vom datagrid gehen
||-----||-----||-----||-----||----> |
| |
| |
3. so soll es aussehen
||-----||-----||-----||-----||---------------- ||
| |
| |

19.11.2019 - 16:38 Uhr

Ok, vielen Dank.
Ich werde es dann mit dem TreeView umsetzen.

Beste Grüße

19.11.2019 - 14:01 Uhr

Ok, das Bild ist nun richtig angehängt

19.11.2019 - 13:52 Uhr

Was ich genau erreichen will sieht so aus. Habe ich auch schon in Code umgesetzt. Nur die SubListBox selection fehlt...
Jedoch möchte ich wie schon geschrieben , das die Elemente von den SubListen quasi als eine Liste gelten und ich somit selektieren kann.

Geht das denn irgendwie ? Muss ich SelectionMode = "Extended" dafür selber nachbauen ?
Das würde sich aber als sehr aufwendig herausstellen... Die unteren Keyboard Modis bräuchte ich ja denn dafür hmm...




                if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
                {
                }
                if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
                {
                }


19.11.2019 - 13:14 Uhr

Hi,
vielen Dank für deine Antwort.
Ein TreeView ist vielleicht besser geeignet, aber damit kann ich meine Vorgaben zum View nicht so gestalten wie mit einer ListBox.

Wie ist denn möglich, dass die SubListboxen als ganze Liste gesehen werden und man mit denen den SelectionMode = "Extended" ausführen kann?
Unabhängig von der ParentListBox. Am besten man hat gar kein SelectedItem in der ParentListBox, sondern nur in den SubListboxen.

Gruß

19.11.2019 - 10:45 Uhr

Hi Leute,

ich habe folgendes Model und benutze WPF mit MVVM.

Ich habe eine ParentListe in der eine SubListe implementiert ist.
Am Ende wird im View quasi eine ListBox, mit einem ItemTemplate in der noch eine Listbox vorhanden ist,angezeigt
Wenn die ParentListbox nun mit ItemsSource befüllt wird dann hat die SubListbox mindestens 3 Elemente.

Wenn ich zum Beispiel nur eine ListBox (ohne ein Liste in dem Model) habe dann kann ich über die Property SelectionMode = "Extended" wunderbar verwenden.

Aber ich möchte eine Selection haben, die sich nur auf die SubElemente bezieht.
Bis jetzt kann nur in der SubListBox selektieren in der ich gerade der Mauszeiger ist.

Wie mache ich es, dass die SubListboxen als ganze Liste gesehen werden und man mit denen den SelectionMode = "Extended" ausführen kann?


public class MainModel
        {
            public int? Index { get; set; }            
            public List<SubModel> SubModels{ get; set; }
        }

        public class SubModel
        {
            public int? Index { get; set; }       
            public string Type1 { get; set; }
            public string Type2 { get; set; }           
        }

 private ObservableCollection<MainModel> _parentCollection = new ObservableCollection<MainModel>();
        public ObservableCollection<MainModel> ParentCollection 
        {
            get { return _parentCollection ; }
            set
            {
                _parentCollection = value;
                OnPropertyChanged(() => ParentCollection);
            }
        }


  private MainModel_selectedParent= new MainModel();
        public MainModelSelectedParent
        {
            get { return _selectedParent; }
            set
            {
                _selectedParent= value;
                OnPropertyChanged(() => SelectedParent);
            }
        }


  private SubModel _selectedSubModel= new SubModel();
        public SubModel SelectedSubModel
        {
            get { return _selectedSubModel; }
            set
            {
                _selectedSubModel= value;
                OnPropertyChanged(() => SelectedSubModel);
            }
        }



<ListBox             ItemsSource="{Binding ParentCollection ,UpdateSourceTrigger=PropertyChanged}" 
                                 SelectedItem="{Binding SelectedParent,UpdateSourceTrigger=PropertyChanged}"
                                 Style="{StaticResource ListBoxStyleV1}"                                
                                 ItemContainerStyle="{StaticResource ListBoxItemStyleV1}"                                 
                                 ItemTemplate="{StaticResource TemplateV1}">           
            </ListBox>



<DataTemplate x:Key="TemplateV1" >
        <Grid Background="Transparent"  HorizontalAlignment="Stretch" VerticalAlignment="Center" Height="Auto" Margin="3,0,3,0" >  
            <Border Margin="2.2" Style="{StaticResource BorderStyleV2}">
                <ListBox         VerticalAlignment="Center" VerticalContentAlignment="Center" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch"
                                 Width="Auto" Height="Auto"  Background="WhiteSmoke" Margin="0,0,0,0"
                                 ItemsSource="{Binding SubModel}"      
                                 SelectedItem="{Binding DataContext.SelectedSubModel, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Blabla}}}"
                                 Style="{StaticResource ListBoxStyleV2}"                                
                                 ItemContainerStyle="{StaticResource ListBoxItemStyleV2}"                                    
                                 ItemTemplate="{StaticResourceTemplateV2}">
                </ListBox>
            </Border>
        </Grid>
    </DataTemplate>

07.06.2019 - 14:44 Uhr

Hallo,

ich möchte ein Ble GATT-Server mit c#erstellen und dafür ein Profil definieren, um mit einen Service eine Xml Datei zu senden und zu empfangen.
Wie gehe ich am besten vor?
Kann mir jemand ein gutes Tutorial oder ein Buch empfehlen?
Ich finde nicht wirklich was passendes im Netz.

Gruß

03.05.2019 - 15:58 Uhr

Hallo,

ich benutzte VS 2019 und entwickle gerade eine App mit Xamarin.forms Mvvm Prism.

Die App soll andere Bluetooth Geräte finden können und in einer Liste anzeigen.
Wenn man ein Gerät in einer Liste ausgewählt hat, dann soll eine Anfrage an den BluetoothServer(Windows PC) gesendet werden und anschließend erfolgt das Pairing.
Wenn das Pairing erfolgt ist soll über das Bluetooth Protocol "RFCOMM" eine xml Datei an das SmartPhone(App) gesendet werden. Das zurücksenden einer Xml Datei soll auch möglich sein.Also muss Input - und OutputStreaming verwendet werden.

Da eine XML-Datei in geringen Distanzen übertagen werden soll, muss Bluetooth Classic mit dem RFCOMM socket benutzt werden (high-speed connection (up to 2.1 Mbps).
Jedoch finde ich für die Anwendung mit Bluetooth Classic mit Xamarin Forms kein passendes NugetPaket/Plugin mit einer Anleitung zum Anwenden.
Für BLE gibt es passende Nuget Packete/Plugins und Unmengen an Tutorials(ärgerlich), aber nicht für Bluetooth classic.

Hat eventuell jemand schon mal was ähnliche versucht und kann mir Tipps oder vielleicht sogar Beispiel-Code nennen?

Gruß

19.12.2018 - 15:36 Uhr

Hi,
Ich möchte in mein Grid ein Kreuz anzeigen lassen.

Hier das Example, bei dem es funktioniert.


 <Grid Name="parent" Visibility="Visible">       
            <Line  X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="{Binding ElementName='parent', Path='ActualHeight'}" Stroke="Black" StrokeThickness="4" />
            <Line  X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}" X2="{Binding ElementName='parent', Path='ActualWidth'}" Y2="0" Stroke="Black" StrokeThickness="4" />
            <Label Background="Red" VerticalAlignment="Center" HorizontalAlignment="Center">My Label</Label>
    </Grid>

Nur wie bekomme ich das Kreuz in folgenden Code über das Grid?


  <StackPanel  Orientation="Horizontal"  VerticalAlignment="Center" HorizontalAlignment="Center" Background="Transparent" >
        <Border Margin="5" Background="Black" BorderBrush="Black"  BorderThickness="0.1" CornerRadius="3" Width="Auto" HorizontalAlignment="Center" >
            <Border.Effect>
                <DropShadowEffect/>
            </Border.Effect>
            <Grid Background="White"  Margin="1" Name="parent"  >
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                
                <Line  X1="0" Y1="0" X2="{Binding ElementName='parent', Path='ActualWidth'}"
                       Y2="{Binding ElementName='parent', Path='ActualHeight'}" 
                        Stroke="Black" StrokeThickness="1" />
                <Line  X1="0" Y1="{Binding ElementName='parent', Path='ActualHeight'}"
                               X2="{Binding ElementName='parent', Path='ActualWidth'}"
                               Y2="0" Stroke="Black" StrokeThickness="1" />
                <Label  Grid.ColumnSpan="2"
                        Content="Hallo"
                        Foreground="Black"
                        Background="Transparent" 
                        Height="Auto" MinWidth="70"
                        HorizontalAlignment="Stretch"
                        HorizontalContentAlignment="Center">
                </Label>                
                <Label Grid.Column="0"
                       Margin ="0,0,0,0"
                       Grid.Row="2"                        
                       VerticalAlignment="Bottom"
                       HorizontalAlignment="Left"
                       Content="xx"
                       Foreground="Black">
                   
                </Label>
            </Grid>
        </Border>
    </StackPanel>

20.11.2018 - 15:00 Uhr

            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "*.customizesql|*.customizesql";
            saveFileDialog.DefaultExt = "customizesql";
            saveFileDialog.AddExtension = true;
            saveFileDialog.Title = "Create New Project";
            saveFileDialog.InitialDirectory = @"D:\bla\bla\";

Aber wie kann ich da ein Image\Icon hinzufügen?

20.11.2018 - 14:49 Uhr

ja , Icon im Windows Explorer 😃

20.11.2018 - 14:40 Uhr

verwendetes Datenbanksystem: <SQlite>

Hi,

wie kann ich einen SqliteDb-File mit einem customized Icon erstellen?

Kann man das mit SaveFileDialog machen?

Beste Grüße 😃

16.08.2018 - 10:52 Uhr

verwendetes Datenbanksystem: <SQLite>

Hi,

ich habe folgende Java Klasse und möchte diese in mein C Sharp Projekt einbinden.
Über einen Trigger soll ein Prepared Statement aufgerufen werden.


CREATE TRIGGER IF NOT EXISTS ´DELETE_TRIGGER´AFTER DELETE ON TABELLEY
    FOR EACH ROW CALL ".........DeleteTrigger ";



public class DeleteTrigger extends TriggerAdapter
{
   public void fire(Connection connect, ResultSet alteZeile, ResultSet neueZeile) throws 
    SQLException
    {
       PreparedStatement deleteZeile = connect.prepareStatement("DELETE FROM 
                                                        TABELLEX WHERE ID = ?");
    deleteZeile .setInt(1, alteZeile.getInt("TABELLEX _ID"));
    deleteZeile .execute();
      
    }
}


Ohne Preprared Statement würde die FUnktion rein in SQLITE so aussehen (Habe ich shcon getestet)


CREATE TRIGGER ´DELETE_TRIGGER´AFTER DELETE ON TABELLEY FOR EACH ROW 
BEGIN
      DELETE FROM TABELLEX WHERE ID = old.TABELLEX _ID;     
END;

Die Frage ist: Wie setze ich dies in meinem C Sharp Projekt um, indem ich ETF6 verwende?

Gruß

09.08.2018 - 18:16 Uhr

habe es leider bis dato nicht hinbekommen.

Problem ist, wenn ich das Database First Modell verwende, dann muss ich in meinem Projekt
nachträglich manuell die fehlenden Properties (Spalten) in den Modellklassen der VIEWS einfügen. Das ist sehr unvorteilhaft und kostet Unmengen von Zeit.

Jemand eine Idee wie ich mit SQLite-Syntax bei "Create View"-Query neuangelegten Spalten einen Datentyp vergebe ?

Gruß

07.08.2018 - 10:22 Uhr

verwendetes Datenbanksystem: <SQLITE>

Hi, ich habe folgende Tabelle;


CREATE TABLE `highscores` (
	`name`	varchar ( 20 ),
	`score`	INTEGER,
	`ID`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
);

Und folgenden VIEW dazu:


create view if not exists highscores6 as
select
id,
name AS Affenschaukel,
score AS Hitzewelle,
(SELECT count(*) from highscores)  as Anzahl
from highscores;

Das Problem ist, das die neu erstellte Spalte im VIEW keinen Datentyp hat und wenn ich z.B Database First mit dem ETF6 ausführe, dann wird in der Modellklasse des Tables die Property Anzahl nicht erstellt.

Deswegeb möchte ich die Spalte Anzahl casten mit einem Integer:


create view if not exists highscores7 as
select
id,
name AS Affenschaukel,
Score as Hitzewelle,
Cast((SELECT count(*) from highscores)as INTEGER) as Anzahl
from highscores;

Trotz cast as Integer hat die Spalte "Anzahl" keinen Datentyp Integer

Was mache ich falsch ?

Gruß

02.08.2018 - 11:06 Uhr

macht Sinn. Vielen Dank für deine Hilfe.

01.08.2018 - 17:06 Uhr

Ich benutzte DB Browser for SQLite ,Version 3.10.1.

Ok, habe es nochmal ausgiebig getestet. Es funktioniert.
Wenn ich mit der Consolen APP ein Select table_Query auf die besagte View ausführe, dann kann ich alle Daten anzeigen lassen ( auch die Spalte FKT mit der Funktion und den Wert 10).

Du hast also die Consolen app die du startest und schaust mit einem "DB Browser" (welcher ) und siehst das Ergebnis nicht?

Ist auch klar, denn nur die SW in der du die Funktion bindest, sieht die Funktion, somit ist dein View dann im DB Browser auch kaput.

Ja das stimmt, woher soll DB Broweser for SQLite das wissen.
Finde ich aber schade, das es dort nicht angezeigt wird.

In dem Browser der H2 Datenbank von Java, von der ich die Datenbank übernehme, werden nämlich auch die Views mit dessen Fields angezeigt und sind nicht kaputt.

Wäre das auch mit dem DB Browser for SQLITE in Verbindung mit C Sharp möglich?

Gruß

01.08.2018 - 16:01 Uhr

Nein, leider immer noch nicht. Hmm irgendwas läuft falsch.

Ich stelle mal meinen meinen Versuch online.

Problem:
Ich möchte ein View erstellen, das beim Ausführen der Syntax (VIEW-Script) eine Funktion abruft und das Ergebnis davon in eine neue Spalte schreibt (diese Spalte ist noch nicht in einer Tabelle vorhanden).
Das View_Script befindet sich in einer TxT-Datei und wird in meiner Consolen-App mit SQLCommand ausgeführt. Die View wird zwar erstellt, jedoch werden die Datentypen der Fields nicht im Db Browser angezeigt und wenn ich auf "Tabelle gehe" klicken sehe ich, dass die Spaltennamen 2,3 und 4 heißen!

SQLITE_Tabelle:


CREATE TABLE `albums` (
	`id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
	`title`	TEXT,
	`artist`	TEXT
);

VIEW_Script.txt


create view if not exists albums_VIEW1111 as
select
id,
title AS Musiktitel,
artist As Kuenstler,
REGEXP(0,1,2) as FKT
from albums;

Program:


class Program
    {
       Database databaseObject = new Database();

       string script=System.IO.File.ReadAllText(@"X:\blabla\Scripte\VIEWFunktion.txt");                 
             
       databaseObject.OpenConnection();

       databaseObject.BindFunction(databaseObject.myConnection, new  
                                           RegExSQLiteFunction());

       SQLiteCommand myCommand = new SQLiteCommand(script, 
                                                databaseObject.myConnection);

       myCommand.ExecuteNonQuery()

       databaseObject.CloseConnection();  
        
       Console.ReadKey();
 }

Klasse:Database


 public class Database
    {
        public SQLiteConnection myConnection;
    
        public Database()
        {
           
            myConnection = new SQLiteConnection("Data Source = database.sqlite3");

            if (!File.Exists("./database.sqlite3"))
            {
                SQLiteConnection.CreateFile("database.sqlite3");
                System.Console.WriteLine("Database file is created");
            }
            System.Console.WriteLine("Eine DB existiert!!!");
        }

        public void OpenConnection()
        {
            if (myConnection.State != System.Data.ConnectionState.Open)
            {
                myConnection.Open();
            }
        }

        public void CloseConnection()
        {
            if (myConnection.State != System.Data.ConnectionState.Closed)
            {
                myConnection.Close();
            }
        }

        public void BindFunction( SQLiteConnection myConnection, SQLiteFunction function)
        {
            var attributes = function.GetType().GetCustomAttributes(typeof(SQLiteFunctionAttribute), true).Cast<SQLiteFunctionAttribute>().ToArray();

            if (attributes.Length == 0)
            {
                throw new InvalidOperationException("SQLiteFunction doesn't have 
               SQLiteFunctionAttribute");
            }
            myConnection.BindFunction(attributes[0], function);
        }

    }

Funktion:


[SQLiteFunction(Name = "REGEXP ", Arguments = 3, FuncType = FunctionType.Scalar)]
    public class RegExSQLiteFunction : SQLiteFunction
    {
        public override object Invoke(object[] args)
        {
            //var y = System.Text.RegularExpressions.Regex.IsMatch(Convert.ToString(args[1]), Convert.ToString(args[0])); 
            var y = (int)args[0] + (int)args[1] + (int)args[2];                        
            return y;
        }
    }    

31.07.2018 - 13:52 Uhr

Hi, danke für die Antworten.
Aber irgendwie klappt es nicht bei mir.

ich habe zum Testen die Klasse "MyRegEx" in mein Projekt eingefügt und den SQLITE Query

"SELECT * FROM Foo WHERE Foo.Name REGEXP '$bar"

an meine Datenbank angepasst.(Habe eine TestTabelle Y mit Spalten x,z angelegt)
Aber die Methode Invoke der Klasse "MyRegEx" wird nicht aufgerufen, wenn ich die Query ausführe. Es passiert einfach nichts.

Hat jemand eventuell ein besseres Beispiel mit allen Zwischenschritten?
Ich finde leider nichts weiter dazu im Netz.

Beste Grüße

24.07.2018 - 14:54 Uhr

verwendetes Datenbanksystem: <SQLite>

Hi,
ich schreibe gerade eine H2 Database in SQLite mit C Sharp um.

ich muss ein VIEW in die SQLIteDatabase einführen, in dem ein ALIAS benutzt wird, der auf eine Methode in JAVA verweist.


CREATE ALIAS methode_a FOR "JAVA_CLASS.methode";


public class JAVA_CLASS
{
   public static final Integer methode_a (final Integer go_Value, final Integer 
   schieber_Value, final int offset_Value) 
  {
        int xy = schieber_Value.intValue() << offset_Value;
        return new Integer(go_Value| xy);
   }
}


create view if not exists VIEWA as
select
id,
TabelleY_ID as eSpalteY,
 F_LABEL as pType,
Ananas_Index as xSpalte,
methode_a (methode_a (methode_a (methode_a (0, A, 2), T, 3), B, 4) , R, 6) as eSpalte,
Brot_Text as cMehl

from
(
    SELECT    
    x.id as id,   
    y.Number as  TabelleY_ID ,   
    IFNULL(B, 0) as B,
    IFNULL(A, 0) as A,
    IFNULL(F_LABEL , '') as F_LABEL ,
    IFNULL(Ananas_Index , 0) as Ananas_Index ,
    IFNULL(T, 0) as T,
    IFNULL(Brot_Text , '') as Brot_Index ,
    (CASE
        WHEN x.Spaltecv= true THEN 1
        ELSE 0 
    END) as R
    from TabelleX x left join TabelleY y on x.TabelleY_ID = y.id
)


CREATE TABLE `TabelleX ` 
(
	`ID`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
	`Ananas_Index `	INTEGER,
	`A`	                        NUMERIC,
        `T`                    	NUMERIC,
        `R`                   	NUMERIC,
        `Brot_Index `           TEXT
)

CREATE TABLE `TabelleY ` 
(
	`ID`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
)	


-Kann man in SQLITE ein ALIAS auch auf eine C Sharp-Methode setzen?
-Oder muss muss man die Methode-LOGIK in SQLITe schreiben und in dem View einfügen?
-Oder muss man einen Trigger in der SQlite-DB, der auf dem VIEW verweist.Und dann ausgeführt wird, wenn im VIEW Zeilen inserted werden.

Ich hoffe mir kann jemand weiterhelfen.

Gruß

16.07.2018 - 15:29 Uhr

verwendetes Datenbanksystem: <bitte SQlite angeben>

Hi,
ich habe folgende Attribute einer Klasse über DatabaseFirst vom ETF6 erstellt bekommen.

       [Key]
        [Column(Order = 0)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public long Dobermann_ID { get; set; }

        [Key]
        [Column(Order = 1)]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public long Dackel_ID { get; set; }

Was ist an der Übersetzung in Fluent Mapping falsch?

            HasKey(x => x.Dobermann_ID);
            Property(x => x.Dobermann_ID)
            .HasColumnOrder(0)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

            HasKey(x => x.Dackel_ID);
            Property(x => x.Dackel_ID)
            .HasColumnOrder(1)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

Bei der Migration bekomme ich nämlich immer eine Fehlermeldung?

Fehlermeldung:
Multiplicity is not valid in Role 'XXX_Target' in relationship 'XCX'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be '1'.

Wenn ich eine Migration Code First mit den Attributen in der Klasse ausführe dann geht es.
Nur mit den Attributen als Fluent Mapping nicht.

Gruß

10.07.2018 - 09:19 Uhr

Hallo,
ich habe folgendes Problem mit SQlite:

SQLite supports a limited subset of ALTER TABLE.
The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table.
It is not possible to rename a column, remove a column, or add or remove constraints from a table.

Mit Add Migration (Paket Manager) im Entity Framework kann ich bei einer SQlite DB Spalten hinzufuegen und den Tabellennamen verändern.
Jedoch möchte ich auch mit Add Migration über das EF Spalten löschen können. Kann man da irgendwie tricksen? Denn immer wenn ich in meinen Projekt Update-Database im Paket Manager (zuvor aus einer Modellklasse eine Propertie gelöscht) durchführ, dann kommt die Fehlermeldung

Fehlermeldung:
Drop column not supported by SQLite

Wenn man es manuell machen will dann muss man man diese Schritte durchführen.


1: Daten (Rows) des zu veränderten Tables speichern.
2: Tabelle löschen
3: Create NEW Table (ohne die Spalte, die man weg haben will)  
4: Update Database

Wie kann ich das aber dynamisch im Entity Framework einbauen?

Gruß

05.07.2018 - 17:21 Uhr

Ja gut, aber wenn man mit dem DB Browser for SQLiteDB eine Tabelle erstellt, dann gibt es aber eine Spalte mit Not Null.
Wenn ich dann "Database First" mit dem ETF6 mache und Not Null in der Datenbank in einer Tabelle eingefügt habe, dann erhalte ich in meinem Projekt eine ModelKlasse mit einem Primärschlüssel ID ohne Attribute, die mir sagen das ich AutoIncrement und NotNull für diesen Schlüssel definiert habe. .
Das ist anscheinen so, weil der Mapper ein Feld Id als Primärschlüssel ansieht.
Und laut deiner Antwort "Wenn es sich um einen Primärschlüssel handelt, dann darf dort auch nicht NULL drin stehen. Daher wäre die Angabe überflüssig." würde es dann so stimmen.

Jetzt kommt aber das ABER:

Wenn ich jetzt aber ein neues Projekt erstelle und "Code First" nehme und dann die Modellklasse von dem DatabaseFirst Projekt kopiere und Add Migration und anschließend Update to Database im paketManager ausführe dann bekomme ich nicht die gleiche Tabelle in einer (zuvor leeren) Datenbank zurück.
Es wurde in der Tabelle beim Primärschlüssel kein NOTNULL definiert.

Somit erhalte ich nicht genau die gleiche Tabelle.

Warum kann man denn im DBBrowser, der extra für SQlite ist, bei Create Table in den Create Window NOTNULL mit einer Checkbox zu dem Field, was auch mit einer CheckBox als Primary Key definiert ist auswählen, wenn eigentlich ein PK schon Default Not NULL ist.
Oder dient diese NOTNULL Checkbox nur für andere Fields und der User muss wissen, das man beim PK nicht NOTNULL extra anklicken muss?

Ich bin ja auch nur ein bsichen verwirtt, weil ETF nicht die Default Values mit in die Modelklassen schreibt und man diese dann manuell in den Konstruktor einfuegen muss.
Kann ja sein das das ETF bei Database First auch die porimary Keys nichtr erichtig interepretiert und ich dann auch manuell Atrribute für die Primary Keys einfuegen muss.
Deswegen bin ich da vorsichtig, da ich die SQLite DB durch ein Script erstellt habe wo auch extra NOTNULL im Create Table Query beium Primary Key steht.

05.07.2018 - 16:34 Uhr

Habe ein bischen rumprobiert. Klassen mit und ohne Fluent Mapping erstellt.

Fazit:
1] Eine Klasse ohne obiges FLuent Mapping:
-Primary Key und AutoIncrement wird gesetzt.


CREATE TABLE `XXX_OhneAlles` (
	`ID`	integer PRIMARY KEY AUTOINCREMENT,
        `DACKELZAHL`	nvarchar NOT NULL
);

2] Klasse mit Fluent Mapping:


HasKey(x => x.ID);
            Property(t =>   t.ID)          
           .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
           .IsRequired();


CREATE TABLE `XXX_alles` (
	`ID`	integer PRIMARY KEY AUTOINCREMENT,
	DACKELZAHL`	nvarchar NOT NULL
);

Es wird hier aber nicht NOT NULL gesetzt.

Wenn ich .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) weg lasse
und nur .IsRequired(); drin habe dann wird NOT NULL gesetzt.

Ich möchte aber in meinem PK AutoIcrement und NOT NULL setzen.

Wie mache ich das mit Fluent Mapping.
Habe schon andere Variationen getestet , jedoch komme ich da leider nicht drauf 😕

04.07.2018 - 14:12 Uhr

Hi, ich habe nochmal eine Frage.



CREATE TABLE `XXX` (
	`ID`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
	`DACKELZAHL`	TEXT
);



modelBuilder.Entity<XXX>()
            .HasKey(x => x.ID);
            .Property(t => t.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
           .IsRequired(); 

modelBuilder.Entity<XXX>()
   .Property(e => e.DACKELZAHL)
    .HasMaxLength(2147483647);

It das so die richtige Übersetzung in Fluent Mapping?]

04.07.2018 - 09:26 Uhr

Hmm, ich weiss leider nicht wie ich das umsetzen mit HasColumnAnnotation umsetzen soll.

Das Problem resultiert aus folgenden.
Ich habe eine SQLite DB erstellt, diese habe ich mit DBFirst über ADO.NET Entity Data Model (EF6) in mein c# Projekt geladen.
Eigentlich ist auch alles gut in den erstellten Modellklassen und dessen Atrributen, bis auf Default Value.Irgendwie hat der Default Value vergessen.

Ich habe dazu auch was im Netz gefunden.

Default value constraint issue persists in all the versions of Entity Framework till EF6 and seems to be resolved in Entity Framework 7

Das heisst, das in EF6 das mit den Default Values gar nicht implementiert ist.
Jedoch kann man da auch tricksen und manuell, wenn man eine neue Migration (InitialCreate) macht und default value hinzufuegen.


AlterColumn("dbo.XXX", "XXX_TYPE", c => c.String(nullable: false, maxLength: 2147483647,defaultValueSql:"Hallo"));

Aber das macht keinen Sinn, da ich ja denn jedes mal für alle Tabellen bei einer Migration die Values eintragen muss.

Gruß

03.07.2018 - 16:12 Uhr

Hi,

wenn ich HasDefaultValueSQL verwenden möchte, dann kommt folgende Fehlermeldung

Fehlermeldung:
"PrimitivePropertyConfiguration" enthält keine Definition für "HasDefaultValueSql", und es konnte keine HasDefaultValueSql-Erweiterungsmethode gefunden werden, die ein erstes Argument vom Typ "PrimitivePropertyConfiguration" akzeptiert (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis).

Ein passende using oder ein Verwies wird nicht als Lösungsvorschlag angegeben.

Muss ich eventuell ein bestimmtes NuGet-Package installieren?

Gruß

02.07.2018 - 17:43 Uhr

HI, ich habe nochmal eine andere Frage,

Wie kann ich per Fluent Mapping ein Field von einer Tabelle auf Default 0 setzen?

Ich finde die Eigenschaft für ein Default Value nicht.
Wenn man z.B ein Field auf NOT NULL setzen möchte, dann kann man das mit .IsRequired tun.

Aber wie sieht die Sache mit DEFAULT Value aus?

Gruß

29.06.2018 - 15:23 Uhr

Hatte mich vertippt. Meine auch .HasColumnType("real");

29.06.2018 - 14:55 Uhr

Hi,

statt über Attribute zu Mappen, möchte ich meine Klassen die aus DBFirst entstanden sind,als Fluend-Mapping in OnModelCreating vornehmen.

Ist folgendes Attribut richtig umgewandelt?

  [Column(TypeName = "real")]
  public double? HIHO { get; set; }

Ist folgender Lösungsversuch korrekt?

modelBuilder.Entity<XXX>()
                .Property(b => b.HIHO )
                .HasColumnName("real");

Gruß

21.06.2018 - 10:15 Uhr

Habe die Lösung gefunden .
In der Configuration.cs folgendes einfuegen, ergänzen.

SetSqlGenerator("System.Data.SQLite", new SQLiteMigrationSqlGenerator());

public Configuration()
 {
    AutomaticMigrationsEnabled = false;
    SetSqlGenerator("System.Data.SQLite", new SQLiteMigrationSqlGenerator());
 }

Gruß

21.06.2018 - 09:46 Uhr

verwendetes Datenbanksystem: <SQLite>

Hi,

ich verwendete Visual Studio 2015, EF Version 6.1.3, System.DATA.SQLite Version 1.0.108 und eine SQLite DB (gefüllt mit Table und Werten).

Habe "Code First from database" ausgeführt und habe alle Modelklassen und das DbContext erhalten. Alles gut bis dahin. "Enable Migrations" im PaketManager eingetippt und Configuratrion.cs erhalten.
Aber wenn ich nun "Add-Migration InitialCreate" eintippe, dann kommt eine Fehlermeldung.

Fehlermeldung:
No MigrationSqlGenerator found for provider 'System.Data.SQLite'. Use the SetSqlGenerator method in the target migrations configuration class to register additional SQL generators.

Wie kann ich den Fehler beheben?

Gruß