2016-05-02 2 views
0

In einer C# -Anwendung ich folgende SQLiteDatabase haben:Vorbereitete Anweisung C#: Unmögliches Umwandeln des System.Data.SqlClient.SqlParameter-Objekts in System.Data.SQLite.SQLiteParameter?

"CREATE TABLE FOLDER(FolderPath TEXT," + "User TEXT," + "ParentPath TEXT," + 
    "TimestampFolder DATETIME DEFAULT CURRENT_TIMESTAMP," + "TimestampParent DATETIME," 
+ "Present TEXT DEFAULT 'True'," + [...]) 

Während dieser vorbereiteten Aussage:

SQLiteCommand command = new SQLiteCommand(null, SQLconnection); 
command.CommandText = "BEGIN TRANSACTION; "+ "INSERT INTO FOLDER (FolderPath, User, ParentPath, TimestampParent, Present)" + "VALUES (@uCpath, @uname, @pp, @date, @bool)" + "END TRANSACTION;"; 

SqlParameter unameParam = new SqlParameter("@uname", SqlDbType.Text, 100); 
SqlParameter uCpathParam = new SqlParameter("@uCpath", SqlDbType.Text, 300); 
SqlParameter uSpathParam = new SqlParameter("@uSpath", SqlDbType.Text, 300); 
SqlParameter ppParam = new SqlParameter("@pp", SqlDbType.Text, 100); 
SqlParameter dateParam = new SqlParameter("@date", SqlDbType.DateTime); 
SqlParameter boolParam = new SqlParameter("@bool", SqlDbType.Text, 100); 

unameParam.Value = user.Username; 
uCpathParam.Value = user.ClientPath; 
uSpathParam.Value = user.ServerPath; 
ppParam.Value = null; 
dateParam.Value = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss"); 
boolParam.Value = true.ToString(); 

command.Parameters.Add(unameParam); 
command.Parameters.Add(uCpathParam); 
command.Parameters.Add(uSpathParam); 
command.Parameters.Add(ppParam); 
command.Parameters.Add(dateParam); 
command.Parameters.Add(boolParam); 

command.Prepare(); 
command.ExecuteNonQuery(); 

Die Ausnahme folgende Laufzeit generiert wird: unmöglich, das Gießen von ‚System.Data. SqlClient.SqlParameter 'object on' System.Data.SQLite.SQLiteParameter'type.

Ich googelte und ich versuchte, SqlDbType.DateTime mit SqlDbType.DateTime2 oder SqlDbType.Date oder SqlDbType.TImestamp auch zu ändern, aber die gleiche Ausnahme wird gestartet. Irgendein Vorschlag? Danke

+1

Ändern 'SqlParameter unameParam = ...' zu 'SQLiteParameter unameParam = ...' ... – CodeCaster

Antwort

1

Sie mischen Klassen zwischen verschiedenen Datenbanktypen.

Wenn Sie eine Verbindung mit einer SQLite-Datenbank herstellen, müssen Sie die entsprechenden Klassen verwenden, aber Sie verwenden SqlParameter, das aus der SQL Server-Klassenhierarchie stammt.

Ersetzen Sie einfach SqlParameter durch SQLiteParameter in Ihrem Code und es sollte viel besser funktionieren.

+0

Gut gemacht. Ich habe nur eine andere verwandte Frage. Wenn ich dies tue, der Fehler: Fehler \t CS1503 \t Argument 2: kann nicht von 'System.Data.SqlDbType' zu 'System.Data.DbType' konvertiert werden \t erschien. Also folgte ich dem Vorschlag und ich änderte SqlDbType mit DbType, aber DbType hat nicht das Feld Text. Wie kann ich? Vielen Dank –

+1

SQLite hat keinen 'Text' Datentyp, einfach String verwenden. –

Verwandte Themen