C# 用C语言将数据编辑成SQL#

C# 用C语言将数据编辑成SQL#,c#,sql-server-2008-r2,C#,Sql Server 2008 R2,我有这个方法来编辑数据,但我不知道如何编写代码。。。到目前为止,我还没有真正理解这一点,我有一个错误。它说“(”附近的语法不正确 问题是当我开始写WHERE 请提供帮助。更新语句的正确语法是 "UPDATE Members SET Name = @name, Surname = @surname, EntryDate = @date WHERE id=@id" 也就是说,您应该像这样使用参数化查询 public void EditMember(Member member)

我有这个方法来编辑数据,但我不知道如何编写代码。。。到目前为止,我还没有真正理解这一点,我有一个错误。它说“(”附近的
语法不正确

问题是当我开始写
WHERE


请提供帮助。

更新语句的正确语法是

  "UPDATE Members SET Name = @name, Surname = @surname, EntryDate = @date WHERE id=@id"
也就是说,您应该像这样使用参数化查询

    public void EditMember(Member member)
    {
        string Name = member.Name;
        string Surname = member.Surname;
        string EntryDate = member.EntryDate.ToString("dd.MM.yyyy");
        string Status = member.Status;

        sqlConnection.Open();
        sqlCommand = new SqlCommand("UPDATE Members SET Name = @name, Surname = @surname, " + 
                         "EntryDate = @date " + 
                         "WHERE Id = @id", sqlConnection);
        sqlCommand.Parameters.AddWithValue("@name", Name);
        sqlCommand.Parameters.AddWithValue("@surname", Surname);
        sqlCommand.Parameters.AddWithValue("@date", EntryDate);
        sqlCommand.Parameters.AddWithValue("@id", Status);
        sqlCommand.ExecuteNonQuery();
        sqlConnection.Close();

作为旁注,请记住AddWithValue是向查询添加参数的简单方法,但如果此查询的性能至关重要,则最好使用完全定义的参数,该参数的数据类型与数据库列的类型和大小完全匹配。

update语句的正确语法是

  "UPDATE Members SET Name = @name, Surname = @surname, EntryDate = @date WHERE id=@id"
也就是说,您应该像这样使用参数化查询

    public void EditMember(Member member)
    {
        string Name = member.Name;
        string Surname = member.Surname;
        string EntryDate = member.EntryDate.ToString("dd.MM.yyyy");
        string Status = member.Status;

        sqlConnection.Open();
        sqlCommand = new SqlCommand("UPDATE Members SET Name = @name, Surname = @surname, " + 
                         "EntryDate = @date " + 
                         "WHERE Id = @id", sqlConnection);
        sqlCommand.Parameters.AddWithValue("@name", Name);
        sqlCommand.Parameters.AddWithValue("@surname", Surname);
        sqlCommand.Parameters.AddWithValue("@date", EntryDate);
        sqlCommand.Parameters.AddWithValue("@id", Status);
        sqlCommand.ExecuteNonQuery();
        sqlConnection.Close();

请注意,AddWithValue是向查询添加参数的一种简单方法,但如果此查询的性能至关重要,则最好使用完全定义的参数,该参数的数据类型与数据库列的类型和大小完全匹配。

请阅读所有答案,而不仅仅是第一个答案部分

这里有多个问题。最紧迫的问题是:

"')' WHERE'('
这就好像你试图引用括号一样,“应该”是:

在这一点上,它看起来像是一个有效的(但不好的)
INSERT
命令……但是您使用的
值在t-SQL中看起来并不是一种有效的更新方式

然而,您根本不应该使用这种方法。它容易出错,难以阅读,最重要的是容易出错

相反,您应该使用参数化SQL:

string sql = @"UPDATE Members
               SET Name = @Name, Surname = @Surname, EntryDate = @EntryDate
               WHERE Id = @Id";

using (var connection = new SqlConnection(...))
{
    connection.Open();
    using (var command = new SqlCommand(sql, connection))
    {
        command.Parameters.Add("@Name", SqlDbType.NVarChar).Value = member.Name;
        command.Parameters.Add("@Surname", SqlDbType.NVarChar).Value = member.Surname;
        command.Parameters.Add("@EntryDate", SqlDbType.DateTime).Value = member.EntryDate;
        command.Parameters.Add("@Id", SqlDbType.NVarChar).Value = member.Id;
        int rows = command.ExecuteNonQuery();
        // TODO: Work out what to do if rows isn't 1
    }
}

(当然,需要对适当的数据类型进行调整。)

请阅读所有答案,而不仅仅是第一部分

这里有多个问题。最紧迫的问题是:

"')' WHERE'('
这就好像你试图引用括号一样,“应该”是:

在这一点上,它看起来像是一个有效的(但不好的)
INSERT
命令……但是您使用的
值在t-SQL中看起来并不是一种有效的更新方式

然而,您根本不应该使用这种方法。它容易出错,难以阅读,最重要的是容易出错

相反,您应该使用参数化SQL:

string sql = @"UPDATE Members
               SET Name = @Name, Surname = @Surname, EntryDate = @EntryDate
               WHERE Id = @Id";

using (var connection = new SqlConnection(...))
{
    connection.Open();
    using (var command = new SqlCommand(sql, connection))
    {
        command.Parameters.Add("@Name", SqlDbType.NVarChar).Value = member.Name;
        command.Parameters.Add("@Surname", SqlDbType.NVarChar).Value = member.Surname;
        command.Parameters.Add("@EntryDate", SqlDbType.DateTime).Value = member.EntryDate;
        command.Parameters.Add("@Id", SqlDbType.NVarChar).Value = member.Id;
        int rows = command.ExecuteNonQuery();
        // TODO: Work out what to do if rows isn't 1
    }
}

(当然,还需要对适当的数据类型进行调整。)

删除
中的引号,你应该没事。请注意有关SQL注入攻击的评论中给出的警告。

删除
中的引号,你应该没事。请注意有关SQL注入攻击的评论中给出的警告。

你应该永远不要将SQL语句与用户输入连接在一起

相反:使用参数化查询
——它们易于使用,避免SQL注入,并提高性能

尝试编写如下代码:

string updateStmt = "UPDATE dbo.Members SET Name = @Name, Surname = @Surname, EntryDate = @EntryDate WHERE Id = @ID";

sqlCommand = new SqlCommand(updateStmt, sqlConnection);

sqlCommand.Parameters.Add("@Name", SqlDbType.VarChar, 100).Value = name;
sqlCommand.Parameters.Add("@Surname", SqlDbType.VarChar, 100).Value = surname;
sqlCommand.Parameters.Add("@EntryDate", SqlDbType.DateTime).Value = entrydate;
sqlCommand.Parameters.Add("@ID", SqlDbType.Int).Value = member.Id;

sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
您应该永远不要将SQL语句与用户输入连接在一起

相反:使用参数化查询
——它们易于使用,避免SQL注入,并提高性能

尝试编写如下代码:

string updateStmt = "UPDATE dbo.Members SET Name = @Name, Surname = @Surname, EntryDate = @EntryDate WHERE Id = @ID";

sqlCommand = new SqlCommand(updateStmt, sqlConnection);

sqlCommand.Parameters.Add("@Name", SqlDbType.VarChar, 100).Value = name;
sqlCommand.Parameters.Add("@Surname", SqlDbType.VarChar, 100).Value = surname;
sqlCommand.Parameters.Add("@EntryDate", SqlDbType.DateTime).Value = entrydate;
sqlCommand.Parameters.Add("@ID", SqlDbType.Int).Value = member.Id;

sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();

编辑帖子以获得正确答案:

i、 在where子句中不需要括号。是的,更好的查询是

  "UPDATE Members SET Name=@Name, Surname=@Surname, EntryDate=@EntryDate WHERE  Id=@ID" 

然后通过command对象的参数添加@Name、@姓氏等。

编辑帖子以获得正确答案:

i、 在where子句中不需要括号。是的,更好的查询是

  "UPDATE Members SET Name=@Name, Surname=@Surname, EntryDate=@EntryDate WHERE  Id=@ID" 

然后通过command对象的参数添加@Name、@姓氏等。

您的代码有语法错误,需要更新,也有问题

您需要传递参数来更新查询,而不是传递直接值

其内容应如下:

public void EditMember(Member member)
{
    string Name = member.Name;
    string Surname = member.Surname;
    string EntryDate = member.EntryDate.ToString("dd.MM.yyyy");
    string Status = member.Status;

    sqlConnection.Open();
    sqlCommand = new SqlCommand("UPDATE Members SET Name=@Name, Surname=@Sirname, EntryDate=@EntryDate WHERE Id = @id", sqlConnection);
    sqlCommand.parameters.AddparameterWithValue("@Name",Name);
    sqlCommand.parameters.AddparameterWithValue("@Surname",Surname);
    sqlCommand.parameters.AddparameterWithValue("@EntryDate",EntryDate);
    sqlCommand.parameters.AddparameterWithValue("@Id",Id);
    sqlCommand.ExecuteNonQuery();
    sqlConnection.Close();
}

您的代码在更新时出现语法错误,并且出现问题

您需要传递参数来更新查询,而不是传递直接值

其内容应如下:

public void EditMember(Member member)
{
    string Name = member.Name;
    string Surname = member.Surname;
    string EntryDate = member.EntryDate.ToString("dd.MM.yyyy");
    string Status = member.Status;

    sqlConnection.Open();
    sqlCommand = new SqlCommand("UPDATE Members SET Name=@Name, Surname=@Sirname, EntryDate=@EntryDate WHERE Id = @id", sqlConnection);
    sqlCommand.parameters.AddparameterWithValue("@Name",Name);
    sqlCommand.parameters.AddparameterWithValue("@Surname",Surname);
    sqlCommand.parameters.AddparameterWithValue("@EntryDate",EntryDate);
    sqlCommand.parameters.AddparameterWithValue("@Id",Id);
    sqlCommand.ExecuteNonQuery();
    sqlConnection.Close();
}

-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入方式始终使用参数化查询而不使用动态SQL。请仔细阅读。-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入方式始终使用参数化查询不要使用动态SQL。请仔细阅读。@marc_s:Yup,正在为此进行编辑。(如果您检查更新,我将不胜感激:)现在看起来好多了,的确!:-)@marc_s:Yup,正在为此进行编辑。(如果您能检查一下更新,我将不胜感激:)现在看起来确实好多了!:-)此语法
更新成员集(名称、姓氏、EntryDate)值(@Name、@Name、@EntryDate)
在SQL Server中无效…这混合了INSERT和UPDATE语句的语法!关于语法我很抱歉,我使用了MYSql和SqlServer,但忘记了问题中的数据库是SqlServer,但是上面的语法在MYSql数据库服务器中是正确的。感谢您的更正。此语法
更新成员集(名称、姓氏、EntryDate)值(@Name、姓氏、EntryDate)
在SQL Server中无效…这混合了INSERT和UPDATE语句的语法!关于语法我很抱歉,我使用了MYSql和SqlServer,但忘记了问题中的数据库是SqlServer,但是上面的语法在MYSql数据库服务器中是正确的。谢谢你的更正。