2009-01-19 10 views
0

je tentais de TDD à l'aide SubSonic 2.1, MySQL et C# et quand je suis arrivé à tester la mise à jour d'un enregistrement existant en utilisant le code ci-dessous,Comment puis-je mettre à jour un changement à l'aide subsonique et MySQL

public void Test2() 
{ 
    User.Insert("jmarcus1", "jmarcus1", "jackass", "marcus", 3, false); 
    User users = new User(); 
    int ulevel = 1; 
    User.Update(2, "jmarcus1", "jmarcus1", "jackass", "marcus", ulevel, false); 
    Assert.AreEqual(1, users.Ulevel); 
} 

avec les éléments suivants

------ Test started: Assembly: SalMan.dll ------ 

Starting the MbUnit Test Execution 
Exploring SalMan, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
MbUnit 2.4.2.130 Addin 
Found 3 tests 
[success] TestFixture1.Test 
[success] TestFixture1.Test1 
[failure] TestFixture1.Test2 
TestCase 'TestFixture1.Test2' 
failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `userid` = 1; SELECT 1 AS id' at line 1 
    MySql.Data.MySqlClient.MySqlException 
    Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `userid` = 1; SELECT 1 AS id' at line 1 
    Source: MySql.Data 
    StackTrace: 
    at MySql.Data.MySqlClient.MySqlStream.OpenPacket() 
    at MySql.Data.MySqlClient.NativeDriver.ReadResult(UInt64& affectedRows, Int64& lastInsertId) 
    at MySql.Data.MySqlClient.MySqlDataReader.GetResultSet() 
    at MySql.Data.MySqlClient.MySqlDataReader.NextResult() 
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) 
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteScalar() 
    C:\svn\subsonicproject\trunk\SubSonic\DataProviders\MySqlDataProvider.cs(280,0): at SubSonic.MySqlDataProvider.ExecuteScalar(QueryCommand qry) 
    C:\svn\subsonicproject\trunk\SubSonic\DataProviders\DataService.cs(533,0): at SubSonic.DataService.ExecuteScalar(QueryCommand cmd) 
    C:\svn\subsonicproject\trunk\SubSonic\ActiveRecord\ActiveRecord.cs(182,0): at SubSonic.ActiveRecord`1.Save(String userName) 
    D:\My Documents\Visual Studio 2008\Projects\SalMan\SalMan\Generated\User.cs(352,0): at Salman.User.Update(Int32 varUserid, String varUsername, String varPassword, String varFname, String varLname, Int32 varUlevel, Boolean varStatus) 
    D:\My Documents\Visual Studio 2008\Projects\SalMan\SalMan\Tests\TestFixture1.cs(40,0): at salman.TestFixture1.Test2() 

[reports] generating HTML report 
TestResults: file:///C:/Documents%20and%20Settings/*****************/Application%20Data/MbUnit/Reports/SalMan.Tests.html 

2 passed, 1 failed, 0 skipped, took 7.66 seconds. 

Est-ce que quelqu'un a une solution de contournement pour cela?

Répondre

1

apparemment la solution était, après Robs excellents conseils ci-dessus, à

User u = User.FetchByID(2); 
u.Ulevel = ulevel; 
u.save(); 

je n'étais pas trop sûr que l'extrait serait au-dessus de travailler pour les mises à jour jusqu'à ce que vous spécifiez l'enregistrement que vous souhaitez mettre à jour.

ma question à Rob cependant, pourquoi ne « u.Update (2, « jmarcus », ... » donner l'erreur ci-dessus

2

Il me semble que vos args sont en panne. Le PK devrait être la première chose - êtes-vous sûr qu'ils s'alignent correctement?

Utilisez-vous ActiveRecord? Si oui - Avez-vous essayé ceci:

User u=new User(); 
u.UserName("jmarcus1"); 
u.Name="jackass" 
u.Ulevel=1; 
... 
u.Save(); 

User u=new User("jmarcus1"); 
u.UILevel=2; 
u.Save(); 
+0

? Merci de remarquer cette erreur. Ce ne fut que pendant le transfert du J'ai essayé de mettre à jour le code – jake

+0

que l'insertion est le deuxième enregistrement dans le DB, ce que j'essayais de faire est de changer le niveau de 3 à 1 via la méthode de mise à jour. suggérant que je réinsérer? – jake

Questions connexes