【问题标题】:Database not updated with no exception message数据库未更新且无异常消息
【发布时间】:2019-07-16 07:40:37
【问题描述】:

我找不到我的数据库表没有更新的原因。下面是我的代码。

    private void button1_Click(object sender, EventArgs e)
    {
       try
        {
            SqlConnection sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Transitionday.mdf;Integrated Security=True";
            sqlConnection.Open();
            SqlCommand cmd = new SqlCommand("UPDATE Transitionday SET Busnumber ='" + label1.Text + "', DT1check1 = '" + dataGridView1[1, 0].Value + "' where Id = '" + textBox4.Text + "'", sqlConnection);
            cmd.ExecuteNonQuery();
            sqlConnection.Close();
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.ToString());
        }

        this.Hide();
    }

【问题讨论】:

  • 您是否尝试过在SELECT 语句中直接针对数据库使用WHERE 子句并检查它是否返回您期望的结果?您的代码也容易受到SQL injection 的攻击。
  • 您在 Catch 块中没有收到任何错误。? DB 中为DT1check1 定义的DataType 是什么?
  • @Diado 嗯,where 和 select 表示像 "SELECT Busnumber from Transitionday WHERE Busnumber ='" + label1.Text + "'"; 然后显示数据?微不足道的 qtn,但我对此并不陌生。
  • "SELECT * from Transitionday where Id = '" + textBox4.Text + "'"
  • 如果该列是数字数据类型,在 ID 周围加上引号应该仍然可以正常工作。如果更新确实没有发生,那么我怀疑真正的问题可能是输入到 SQL 语句中的 ID 在数据库表中不存在。

标签: c# sql-server winforms


【解决方案1】:

数据库中的Id列类型是什么?因为您的脚本假定它的值需要用引号括起来。

"' where Id = '" + textBox4.Text + "'"

翻译成

where Id = 'whatItyped'

如果您的 Id 列是字符串(varchar、nvarchar)或 guid,那么这是正确的。如果您的 Id 列是 int,则不正确。

如果不正确,则where Id = 'whatItyped' 将返回 0 个命中,这意味着将更新 0 行。这不是错误,因此数据库或代码实际上不会给您错误响应。

你需要你的脚本是

where Id = 123

这意味着您的代码需要更改为

"' where Id = " + textBox4.Text

请注意,' 字符已被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2021-05-17
    • 2015-10-02
    • 2013-11-13
    相关资源
    最近更新 更多