gpt4 book ai didi

c# - 仅在其他机器上的 MySQL 语法错误

转载 作者:行者123 更新时间:2023-11-29 06:06:57 26 4
gpt4 key购买 nike

我已经创建了一个程序来监控我公司的项目进度,但在测试时我遇到了一个非常奇怪的问题。当我在电脑的 windows 10 下测试它时,它创建的一切都按预期运行。但是,当我在运行 windows 78 的同事的计算机上测试它时,我在 sql 查询代码中得到以下错误 “您的 SQL 语法有错误,请查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的 '01 where teammember.Name="SomeName"and projects="SomeProject"' 附近使用的正确语法“。导致错误的代码如下。

 public void UpdateHoursWorked(string teamMember, string projectName, float hoursWorked)
{
SetSafeUpdates(false);

// Error HERE
using (MySqlCommand cmd = new MySqlCommand("update memberprojects " +
"join teammembers on Member = teammembers.TeamMembersID " +
"join projects on Project = projects.ProjectsID " +
"set HoursWorkedOnProject = HoursWorkedOnProject + " + hoursWorked + " " +
"where teammembers.Name = \"" + teamMember + "\" and projects.ProjectName = \"" + projectName + "\"", conn))
cmd.ExecuteNonQuery();

// Update the total hours worked in the projects table, and re-read the projects
UpdateTotalHoursWorked(projectName, hoursWorked);

OnUpdate(EventArgs.Empty);
}

我似乎无法查明问题所在,因为在 Windows 10 下程序运行完美,语法对我来说看起来是正确的。知道可能导致问题的原因吗?

最佳答案

使用 Command.Parameters 编写您的查询。还可以使用 @ 连接多行的字符串。 格式化您的查询!

好处:

1)不会出现这样的问题

2) 你免受sql注入(inject)攻击

3) 代码更易读/写

using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = @"
UPDATE
MemberProjects
JOIN
TeamMembers ON Member = TeamMembers.TeamMembersID
JOIN
Projects ON Project = Projects.ProjectsID
SET
HoursWorkedOnProject = HoursWorkedOnProject + @HoursWorked
WHERE
TeamMembers.Name = @Name AND
Projects.ProjectName = @ProjectName";

cmd.Connection = conn;
cmd.Parameters.AddWithValue("@HoursWorked", hoursWorked);
cmd.Parameters.AddWithValue("@Name", teamMember);
cmd.Parameters.AddWithValue("@ProjectName", projectName);

cmd.ExecuteNonQuery();
}

我认为您可以轻松看出良好格式设置和使用参数之间的区别。我建议你把表名写在Member, Project 前面这样会更容易理解这个字段的位置。

关于c# - 仅在其他机器上的 MySQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com