Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过MySql Insert传递Foreach变量_C#_Mysql_Sql_Api - Fatal编程技术网

C# 通过MySql Insert传递Foreach变量

C# 通过MySql Insert传递Foreach变量,c#,mysql,sql,api,C#,Mysql,Sql,Api,我正试图通过一个游戏的数据匹配,并将其存储在一个数据库中。如何将x.something传递到我的数据库。当我尝试这样的事情时: using (var web = new WebClient()) { web.Encoding = System.Text.Encoding.UTF8; var jsonString = responseFromServer;

我正试图通过一个游戏的数据匹配,并将其存储在一个数据库中。如何将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);
            }
使用(var web=new WebClient())
{
web.Encoding=System.Text.Encoding.UTF8;
var jsonString=responseFromServer;
var jss=新的JavaScriptSerializer();
var MatchesList=jss.Deserialize(jsonString);
string connectString=“Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;”;
MySqlConnection=newmysqlconnection(connectString);
MySqlCommand=connect.CreateCommand();
command.CommandText=“插入数据(级别、名称)值(“+x.Account_level+”,“+x.name+”)”;
字符串MatchesListStr=“”;
connect.Open();
foreach(匹配列表中的x)
{
MatchesListStr=MatchesListStr+”,“+x.Name+”,“+x.Account\U Level+”,“+x.Reference\U Name+”!”;
command.ExecuteNonQuery();
}
connect.Close();
MessageBox.Show(MatchesListStr);
}
它说:

“MySql.Data.MySqlClient.MySqlException”类型的未处理异常 发生在MySql.Data.dll中

附加信息:您的SQL语法有错误;检查 右边是与MySQL服务器版本对应的手册 使用“near”字符的语法

感谢您的帮助,我是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; }
        }
使用(var web=new WebClient())
{
web.Encoding=System.Text.Encoding.UTF8;
var jsonString=responseFromServer;
var jss=新的JavaScriptSerializer();
var MatchesList=jss.Deserialize(jsonString);
string connectString=“Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;”;
MySqlConnection=newmysqlconnection(connectString);
MySqlCommand=connect.CreateCommand();
connect.Open();
foreach(匹配列表中的x)
{
command.CommandText=“插入数据(级别,模式)值(@level,@mode)”;
command.Parameters.AddWithValue(“@level”,x.Account\u level);
command.Parameters.AddWithValue(“@mode”,x.Name);
command.ExecuteNonQuery();
}
connect.Close();
}
公开课比赛
{
公共整数帐户\u级别{get;set;}
公共字符串名称{get;set;}
}

回答与之前相同。

您当前的方法容易受到影响。您应该通过查询来避免这种情况

我认为您遇到了问题,因为在提供字符串时,表中的
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
(类型为
匹配的
)的参数。这就是为什么在命名变量时应该更加小心。

我将研究如何使用以确保正确转义字符。如果在x.Account_级别或x.Name变量中有奇数字符,则会导致SQL无效。我将所有这些都写在文档的下方。我没有包括它,因为我认为它是一个给定的因子。我为我需要的所有值创建了参数。我仍然会犯同样的错误。插入断点后,参数将显示预期的正确值,但它只是有一个问题:command.ExecuteNonQuery();另外,我在代码中将x.level设置为int lower。我只是没有分享。好吧-你也更新了如上所示的CommandText?您是否可以直接在服务器上执行该命令?在调试时,您应该能够看到完整的命令字符串,或者您将在Sql Server Profiler中看到它是否有效(在运行和记录时)。如果直接在服务器上运行insert时,insert不起作用,请对其进行调优,直到它起作用,然后根据需要更新CommandText。让我知道这是否有帮助。当我去掉参数时,它工作得很好。我想我会坚持下去,直到找到更好的解决方案。毕竟,我认为当我访问一家公司的程序时,我不会被注射。不过,谢谢你,等我完全弄明白后,我会回到这个话题上来