【发布时间】:2020-07-07 00:57:10
【问题描述】:
我正在尝试使用 C# 从 XML 文件中读取数据,并更新我的 SQL 表。 但什么也没有发生。
我的 XML 看起来像这样
<User>
<Table>
<userID>535631</userID>
<Date>2017-12-18</Date>
</Table>
<Table>
<userID>36334</userID>
<Date>2020-02-03</Date>
</Table>
<Table>
<userID>734563</userID>
<Date>2020-02-03</Date>
</Table>
<Table>
<userID>6334</userID>
<Date>2020-02-21</Date>
</Table>
</User>
我尝试了什么:
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\\temp\\data\\myData.xml");
XmlNodeList node = doc.SelectNodes("/User/Table");
string source = ConfigurationManager.ConnectionStrings["JBVRM"].ConnectionString;
SqlConnection conn = new SqlConnection(source);
SqlCommand cmd = new SqlCommand();
foreach (XmlNode xn in node)
{
string userID = xn["userID"].InnerText;
string NewDate= xn["Date"].InnerText;
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter("UPDATE [dbo].[User] SET Date='"+NewDate+"' WHERE UserID="+ userID , source);
conn.Close();
// Console.WriteLine(userID+" "+Date); // This prints everything very fine.
}
任何建议我做错了什么?我可以打印日期和用户 ID fint。但我的表没有更新。
解决方案感谢@Magnetron 和@Gnud
using (SqlConnection connection = new SqlConnection(source))
{
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = "UPDATE [dbo].[User] SET Date=@Date WHERE userID=@userID";
cmd.Parameters.AddWithValue("@Date", xn["Date"].InnerText);
cmd.Parameters.AddWithValue("@userID", xn["userID"].InnerText);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
}
【问题讨论】:
-
SqlAdapterConstructor,您使用的是选择命令而不是更新命令。 -
嗯好的..谢谢。我会尝试使用 cmd.CommandText.. 还是有更好的主意?
-
是的,使用
CommandText和参数,而不是信任用户输入,因为这会使您容易受到 sql 注入的攻击。 -
评论您的解决方案:将最外面的
using(连接的)移到循环之外。和Open()循环前的连接。只连接一次。如果您在循环内创建和关闭连接,您将为 XML 文件中的每一行连接和断开一次。
标签: c# sql-server xml