【问题标题】:Insert function to insert record in SQL table working properly but Update Function to Update Record is not working properly在 SQL 表中插入记录的插入函数正常工作,但更新记录的更新函数工作不正常
【发布时间】:2013-07-25 18:36:57
【问题描述】:

这些是我在 SQL 数据库中更新学生记录和插入学生记录的函数。

public void UpdateStudent(ref student stu, string rollno) //Update the values to corresponding roll number 'rollno'
        {
            try
            {
                connection.Open();  //I have already defined the connection and command
                command = new SqlCommand("update student set FirstName='"+stu.Firstname+"',LastName='"+stu.Lastname+"',YearOfAdmission="+stu.Yearofadmission+",Branch='"+stu.Branch+"' where RollNo='"+rollno+"'", connection); //Yearofadmission is int
                command.ExecuteNonQuery();

        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (connection != null)
                connection.Close();
        }
    }
public void insertstudent(ref student s)
        {            
            try
            {
                connection.Open();
                command = new SqlCommand("insert into student values('"+s.Rollno+"','"+ s.Firstname+"','"+s.Lastname+"',"+s.Yearofadmission+",'"+s.Branch+"','"+s.Password+"')", connection);                 
                command.ExecuteNonQuery();

            }
            catch (Exception)
            {
                throw;           
            }
            finally
            {
                if (connection != null)
                    connection.Close();
            }
        }

我将值插入 SQL 表的第二个函数“insertstudent”工作正常,并将值正确插入到数据库表中。但是第一个函数“更新学生”没有更新数据库表中的值。它也没有提供任何错误。 那我哪里错了?


提前致谢!

【问题讨论】:

  • 你应该使用命名参数而不是连接一个 sql 字符串。
  • 尝试捕获更新中生成的 sql 并在 Management Studio 中运行它以查看它的作用。看起来您的过滤器 rollno 不匹配。
  • 一定要切换到sql参数!如果您真的想查看问题,我会在其中放置一个断点并调试到该点。比检查你的命令看看它在做什么。但是,是的,放弃该代码并切换到dotnetperls.com/sqlparameter
  • 您对 sql 注入攻击敞开心扉。如果使用您的软件的任何人都知道一点 sql,他们可以轻松地在您的文本框中输入他们自己的查询,并随意删除/更新/插入/混乱您的数据。你应该像 Cam Bruce 所说的那样使用 SqlCommand.Parameters 集合。

标签: c# sql sql-server insert sql-update


【解决方案1】:

检查以确保传递给更新函数的 rollno 是正确的。如果该命令没有抛出错误,则很可能它正在正确执行并且最终没有更新任何内容,因为没有记录命中提供的 rollno。

在更新函数的开头放置一个断点并检查提供的rollno值。

另外,卷号。在您的插入语句中是“s”的子集,而在更新中,它是单独提供的,您可能需要检查是否可以。

【讨论】:

    【解决方案2】:

    使用参数的正确方式。您还需要处理您的连接和命令对象。

     using (connection = new SqlConnection("connectionstring"))
        {
        using (command = connection.CreateCommand())
        {
        command.CommandText = "update student set FirstName= @FirstName  ,LastName= @LastName, YearOfAdmission= @YearOfAdmission, Branch=@Branch WHERE RollNo= @RollNo";
    
        command.Parameters.AddWithValue("@FirstName", stu.FirstName);
        command.Parameters.AddWithValue("@LastName", stu.LastName);
        command.Parameters.AddWithValue("@YearOfAdmission", stu.YearOfAdmission);
        command.Parameters.AddWithValue("@Branch", stu.Branch);
        command.Parameters.AddWithValue("@RollNo", stu.RollNo);
    
           connection.Open();
    
                        command.ExecuteNonQuery();
        connection.Close();
        }
        }
    

    【讨论】:

    • 从安全角度来看,使用命名参数可以防止 SQL 注入。从易用性的角度来看,您不需要自己进行字符串连接,而且它是更具可读性的代码。
    • 我明白了。。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2014-02-27
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多