Передайте переменные Foreach через MySql Insert

Я пытаюсь просмотреть данные, соответствующие игре разработчика API, и сохранить их в базе данных. Как бы я передать x.something через мою базу данных. Когда я пытаюсь что-то вроде этого:

            using (var web = new WebClient())
            {
                web.Encoding = System.Text.Encoding.UTF8;
                var jsonString = responseFromServer;
                var jss = new JavaScriptSerializer();
                var MatchesList = jss.Deserialize<List<Matches>>(jsonString);
                string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;";
                MySqlConnection connect = new MySqlConnection(connectString);
                MySqlCommand command = connect.CreateCommand();
                command.CommandText = "INSERT into data (level, name) values('" + x.Account_Level + "','" + x.Name + "')";
                string MatchesListStr = "";

                connect.Open();
                foreach (Matches x in MatchesList)
                {
                    MatchesListStr = MatchesListStr + ", " + x.Name + ", " + x.Account_Level + ", " + x.Reference_Name + "!";
                    command.ExecuteNonQuery();
                }
                connect.Close();
                MessageBox.Show(MatchesListStr);
            }

Это говорит:

Произошло необработанное исключение типа "MySql.Data.MySqlClient.MySqlException" в MySql.Data.dll

Дополнительная информация: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования символа "рядом",

Любая помощь приветствуется, я новичок в C#. Спасибо!

Изменить - Обновленный код:

       using (var web = new WebClient())
       {
           web.Encoding = System.Text.Encoding.UTF8;
           var jsonString = responseFromServer;
           var jss = new JavaScriptSerializer();
           var MatchesList = jss.Deserialize<List<Matches>>(jsonString);
           string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;";
           MySqlConnection connect = new MySqlConnection(connectString);
           MySqlCommand command = connect.CreateCommand();

           connect.Open();
           foreach (Matches x in MatchesList)
           {
               command.CommandText = "INSERT into data (level, mode) values(@level, @mode)";
               command.Parameters.AddWithValue("@level", x.Account_Level);
               command.Parameters.AddWithValue("@mode", x.Name);
               command.ExecuteNonQuery();
           }
           connect.Close();

       }

 public class Matches
        {
            public int Account_Level { get; set; }           
            public string Name { get; set; }
        }

Отвечая тем же ответом, что и ранее.

1 ответ

Решение

Ваш текущий подход подвержен внедрению SQL. Вам следует избегать этого путем параметризации вашего запроса.

Я ожидаю, что у вас возникли проблемы с level Столбец в таблице принимает в качестве входных данных целое число - когда вы вводите строку.

Я бы сделал что-то вроде этого, чтобы разобраться в вашей проблеме:

command.CommandText = "INSERT into data (level, name) values (@level, @name)";
// Now let’s add the parameters themselves.
command.Parameters.AddWithValue("@level", x.level);
command.Parameters.AddWithValue("@name", x.name);

Примечание: я также предполагаю, что вы предоставляете параметр с именем x (который имеет тип Matches) к рутине. Вот почему вы должны быть более осторожны при именовании переменных.

Другие вопросы по тегам