C# 通过MySql Insert传递Foreach变量
我正试图通过一个游戏的数据匹配,并将其存储在一个数据库中。如何将x.something传递到我的数据库。当我尝试这样的事情时: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;
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。让我知道这是否有帮助。当我去掉参数时,它工作得很好。我想我会坚持下去,直到找到更好的解决方案。毕竟,我认为当我访问一家公司的程序时,我不会被注射。不过,谢谢你,等我完全弄明白后,我会回到这个话题上来