Как мне обновить изменения, используя SubSonic и MySQL - PullRequest
0 голосов
/ 19 января 2009

Я пытался TDD , используя SubSonic 2.1, MySQL и C #, и когда я приступил к тестированию обновления существующей записи, используя код ниже,

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);
}

со следующим

------ 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.

У кого-нибудь есть обходной путь для этого?

Ответы [ 2 ]

2 голосов
/ 19 января 2009

Мне кажется, что ваши аргументы вышли из строя. ПК должен быть первым - вы уверены, что они правильно выстроились?

Используете ли вы ActiveRecord? Если так - пробовали ли вы это:

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();
1 голос
/ 20 января 2009

, видимо, решение было, следуя превосходному совету Робса выше,

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

Я не был слишком уверен, что приведенный выше фрагмент будет работать для обновлений, пока вы не укажете запись, которую вы хотите обновить.

Однако мой вопрос к Робу таков: почему «u.Update (2,« jmarcus », ...») выдает ошибку выше

...