无法从ASP.NET Web窗体更新数据库

无法从ASP.NET Web窗体更新数据库,asp.net,sql-server,webforms,sql-update,Asp.net,Sql Server,Webforms,Sql Update,我无法获取ASP.NET Web表单来更新数据库。我正在尝试编辑数据库中的现有记录。webform将记录中的数据填充到表单中。然后,用户在提交表单时更改数据并更新数据库中的记录 问题是,提交修改后的表单时,数据库中没有任何更改。我做错了什么?SQL在MSSQL管理工作室中工作 谢谢 private void SaveToDatabase () { using (SqlConnection conn = new SqlConnection (_connectionString_Bluebo

我无法获取ASP.NET Web表单来更新数据库。我正在尝试编辑数据库中的现有记录。webform将记录中的数据填充到表单中。然后,用户在提交表单时更改数据并更新数据库中的记录

问题是,提交修改后的表单时,数据库中没有任何更改。我做错了什么?SQL在MSSQL管理工作室中工作

谢谢

private void SaveToDatabase ()
{
    using (SqlConnection conn = new SqlConnection (_connectionString_Bluebook))
    {
        conn.Open ();

        string sql = @"update Companies

                            set CompanyName=@CompanyName, AccountNo=@AccountNo

                            where AccountNo=" + _accountNo;

        using (SqlCommand command = new SqlCommand (sql, conn))
        {
            command.Parameters.Add (new SqlParameter ("@CompanyName", TextBox_CompanyName.Text));
            command.Parameters.Add (new SqlParameter ("@AccountNo", TextBox_Account.Text));

            command.ExecuteNonQuery ();
        }

        conn.Close ();
    }
}

如果SQL参数不起作用,请尝试以下方法:

comm = new SqlCommand("update student_detail set s_name= '" + txtname.Text + "', age= "+txtage.Text+" , course=' " + txtcourse.Text + "' where roll_no = " + txtrn.Text + " ", conn);
尝试放置调试器并提供编译器的确切错误
尝试将原始帐号的参数添加到查询中。下面的示例使用强类型参数实现安全性和性能,猜测实际的SQL数据类型和列长度,您应该将其更改为实际的定义

private void SaveToDatabase()
{
    using (SqlConnection conn = new SqlConnection(_connectionString_Bluebook))
    {
        conn.Open();

        string sql = @"update dbo.Companies

                    set CompanyName=@CompanyName, AccountNo=@AccountNo

                    where AccountNo=@OriginalAccountNo;
                    IF @@ROWCOUNT = 0 RAISERROR('Account number %s not found',16,1,@OriginalAccountNo)";

        using (SqlCommand command = new SqlCommand(sql, conn))
        {
            command.Parameters.Add(new SqlParameter("@CompanyName",SqlDbType.VarChar,100).Value = TextBox_CompanyName.Text;
            command.Parameters.Add(new SqlParameter("@AccountNo", SqlDbType.Char, 10).Value = TextBox_Account.Text;
            command.Parameters.Add(new SqlParameter("@OriginalAccountNo", SqlDbType.Char, 10).Value = _accountNo;

            command.ExecuteNonQuery();
        }

    }
}
如果行仍未按预期更新,请确保_accountNo包含正确的值

编辑:


我在SQL批处理中添加了一个RAISERROR语句以便于执行此操作,如果从未出现“未找到”条件,则可以将其保留在代码中。

是否检查了_accountNo的值并查看它是否符合预期?该值集在哪里?您100%确定没有在回发时重新填充吗?虽然调试器是一个好建议,但我投了反对票,因为将参数化查询从不受信任的用户输入更改为字符串串联确实是个坏主意。您好,更改为concat的建议只是为了确定问题是与查询有关还是与sql连接有关。无论如何,我从来不会对否决票感到难过:,因为这是一个改进的范围。在这种情况下,我认为最好在您的回答中提到这一点,这样就不会在生产代码中留下它。我得到了我那份反对票:-