C# - Can't insert data into MySQL database -
i making application scrape website. website has bunch of players, , scrape each 1 of profile pages. profile pages contains information name, level, world , last login date.
so made object called player. , add data list.
public static list<player> players = new list<player> { }; public class player { public string name { get; set; } public string sex { get; set; } public string vocation { get; set; } public int level { get; set; } public int achievements { get; set; } public string world { get; set; } public string lastlogin { get; set; } public string accountstatus { get; set; } public int onlinestatus { get; set; } }
i add data this:
new player { name = playername, sex = playersex, vocation = playervocation, level = playerlevel, achievements = playerachievements, world = playerworld, lastlogin = playerlastlogin, accountstatus = playeraccountstatus, onlinestatus = playeronlinestatus };
i want add players mysql database, cannot seem understand how insert data.
i established connection , tried select data , works fine. connection not bad. inserting seems not work.
here's code add insert data tables:
string connstring = "server=localhost;port=3306;database=rookstat;uid=xxxxxxx;password=xxxxxx;"; mysqlconnection conn = new mysqlconnection(connstring); mysqlcommand command = conn.createcommand(); foreach (player rooker in players) { command.commandtext = "insert rookstayers (id, name, sex, vocation, level, achievements, world, lastlogin, accountstatus, onlinestatus) values('', rooker.name, rooker.sex, rooker.vocation, rooker.level, rooker.achievements, rooker.world, rooker.lastlogin, rooker.accountstatus, rooker.onlinestatus)"; conn.open(); command.executenonquery(); } conn.close();
what doing wrong? unsure values insert. supposed rooker.name or what?
try following:
using(var connection = new mysqlconnection(connectionstring)) { connection.open(); using(var command = new mysqlcommand()) { command.connection = connection; command.commandtext = @"insert rookstayers (name, sex, vocation, level, achievements, world, lastlogin, accountstatus, onlinestatus) values (@name, @sex, @vocation, @level, @achievements, @world, @lastlogin, @accountstatus, @onlinestatus)"; command.prepare(); foreach(var rooker in players) { command.parameters.clear(); command.parameters.addwithvalue("@name", rooker.name); command.parameters.addwithvalue("@sex", rooker.sex); command.parameters.addwithvalue("@vocation", rooker.vocation); command.parameters.addwithvalue("@level", rooker.level); command.parameters.addwithvalue("@achievements", rooker.achievements); command.parameters.addwithvalue("@world", rooker.world); command.parameters.addwithvalue("@lastlogin", rooker.lastlogin); command.parameters.addwithvalue("@accountstatus", rooker.accountstatus); command.parameters.addwithvalue("@onlinestatus", rooker.onlinestatus); command.executenonquery(); } } }
note differences:
- wrapping disposable objects (i.e. mysqlconnection , mysqlcommand) in using statements.
- updated sql insert command use sql parameters. in case, "@name" replaced value of rooker.name when command executed.
- excluded id column in insert statement assume identity column don't have explicitly include that.
- lastly, use of command.prepare(). specified in mysql .net connector documentation here, can can provide significant performance improvements on queries executed more once.
Comments
Post a Comment