2017-02-26 3 views
0

Ich bin neu mit Dapper und ich bin ein wenig verloren auf die Anweisungen für eine Insert-Anweisung folgen..net Kern einfügen mit Dapper mit Parametern

Ich habe folgendes Modell:

Benutzer

public class User 
{ 
    public int UserId { get; set;} 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

und die folgende Steuerung, die Daten aus einer JSON Ajax-Aufruf abruft (Ich habe 3 verschiedene Möglichkeiten versucht, basierend auf drei verschiedenen Antworten, die ich gesehen haben

Versuch 1Fehler:. Falsche Syntax in der Nähe von UserId

public IActionResult UserData([FromBody] User user) 
{ 
    using (SqlConnection cn = new SqlConnection(@"Server=.\SQLEXPRESS...")) 
    { 
     cn.Query<User>(@"INSERT INTO User VALUES UserId = @UserId, UserName = @UserName, Password = @Password", 
     new 
     { 
      UserId = user.UserId, 
      UserName = user.UserName, 
      Password = user.Password 
     }); 

    return StatusCode(200); 
    } 
} 

Attempt 2Fehler: Falsche Syntax in der Nähe der Schlüsselworttabelle

public IActionResult UserData([FromBody] User user) 
{ 
    using (SqlConnection cn = new SqlConnection(@"Server=.\SQLEXPRESS...")) 
    { 
     cn.Execute(@"INSERT Table(User) VALUES(@UserId, @UserName, @Password)", 
     new 
     { 
      UserId = user.UserId, 
      UserName = user.UserName, 
      Password = user.Password 
     }); 

    return StatusCode(200); 
    } 
} 

Versuch 3 (versucht, mit Dapper.Contrib)Fehler: Ungültiger Objektname Benutzer (I don Ich weiß, was das ist, Benutzer gibt es nirgendwo, da ich keine Pluralformen verwende

public IActionResult UserData([FromBody] User user) 
{ 
    using (SqlConnection cn = new SqlConnection(@"Server=.\SQLEXPRESS...")) 
    { 
     cn.Insert<User>(new User 
     { 
      UserId = user.UserId, 
      UserName = user.UserName, 
      Password = user.Password 
     }); 

    return StatusCode(200); 
    } 
} 

Antwort

2

In dem Code, den Sie für Versuch 1 angegeben haben, sieht Ihre SQL-Einfügeanweisung nicht korrekt aus!

Auch, wenn Sie einfach einfügen, können Sie die Execute Methode verwenden. Das sollte funktionieren.

Wenn Ihre Tabelle nur diese drei Spalten enthält, können Sie dies tun.

var [email protected]"INSERT INTO [User] VALUES (@UserId,@UserName,@Password)"; 
cn.Execute(q,user); 

Wenn Ihre Tabelle mehr Spalten als das, was Sie in der INSERT-Abfrage angegeben ist, sollten Sie explizit die Spaltennamen angeben (in der Reihenfolge) in der INSERT-Anweisung.

var [email protected]"INSERT INTO [User](UserId,UserName,Password) VALUES (@UserId,@UserName,@Password)"; 
cn.Execute(q,user); 

Beachten Sie, dass das Schlüsselwort User ein reserviertes Schlüsselwort ist. Sie können es mit eckigen Klammern umschließen, um den Fehler zu vermeiden.

Verwenden Sie [User] anstelle von User.

Referenz: https://technet.microsoft.com/en-us/library/dd776381(v=sql.105).aspx#BasicSyntax