【问题标题】:SQL Server INSERT statement is not executing but I am not receiving an exception eitherSQL Server INSERT 语句未执行,但我也没有收到异常
【发布时间】:2019-05-24 17:53:00
【问题描述】:

在我的按钮单击事件中,我想在表格中插入一行。当我单击按钮时,我没有例外,我也没有显示我的消息框。我有消息框作为检查查询是否已执行的一种方式。

当我单步执行时,它会跳过 MessageBox 并且不会引发异常。

private void BtnSend_Click(object sender, EventArgs e)
{
    string theDate = dateTimePicker1.Value.ToString("MM-dd-yyyy");

    var select = "INSERT INTO Trinity3(Date, Device_S_N, Student_Last_Name, Student_First_Name, Student_Number, School, Grade, Damage)" +
                 "VALUES (@Date, @Serial, @LastName, @FirstName, @StudentNum, @School, @Grade, @Damage)" +
                 "COMMIT";

    SqlConnection connection = new SqlConnection("Data Source=CPS1113020004; Initial Catalog=Coweta Public Schools; Integrated Security=True");               

    // Create a SqlCommand instance
    SqlCommand command = new SqlCommand(select, connection);

    // Add the parameter
    command.CommandType = CommandType.Text;
    command.CommandText = select;
    command.Parameters.AddWithValue("@Date", theDate);
    command.Parameters.AddWithValue("@Serial",txtSerial.Text);
    command.Parameters.AddWithValue("@LastName",txtLastName.Text);
    command.Parameters.AddWithValue("@FirstName",txtFirstName.Text);
    command.Parameters.AddWithValue("@StudentNum", txtStudentNum.Text);
    command.Parameters.AddWithValue("@School",txtSchool.Text);
    command.Parameters.AddWithValue("@Grade", txtGrade.Text);
    command.Parameters.AddWithValue("@Damage", txtDamage.Text);

    // Execute the query
    try
    {
        connection.Open();
        command.ExecuteNonQuery();
        MessageBox.Show("Records inserted successfully");
    }
    catch
    {
        // Handle exception, show message to user...
    }
    finally
    {
        connection.Close();
    }

    this.Visible = false;

    var searchForm = new SearchForm();
    searchForm.ShowDialog();
}

【问题讨论】:

  • [Date]放在括号里。你的“日期”应该是一个日期,而不是一个字符串。不要认为你需要那条 COMMIT 行。
  • 清理解决方案并确保您处于调试模式。然后构建并确保没有错误。
  • 空的Catch 块永远不会报告问题。另外,AddWithValue 是个坏主意
  • 如何“跳过消息框”?如果执行该行代码,则会显示一个消息框。您确定自上次更改后您已完全重新构建代码?或者您的(空)catch 块没有被访问?
  • 你在 catch 部分什么都没有,异常可能被默默地忽略了。

标签: c# sql-server winforms


【解决方案1】:

您正在抛出异常,但您没有看到,因为您的 catch 块中没有任何内容。

  1. 查找 Try with Resources 约定并始终使用它。即使出现异常,这也会自动为您关闭连接。这是必须的。

  2. 将异常添加到您的 catch 块中,以便您可以看到错误。

  3. 您的 SQL 字符串需要在每个部分后有空格。当您使用“+”连接时,不会创建额外的空间。所以你的查询实际上是这样的: INSERT INTO Trinity3(Date, Device_S_N, Student_Last_Name, Student_First_Name, Student_Number, School, Grade, Damage)VALUES (@Date, @Serial, @LastName, @FirstName, @StudentNum, @School, @Grade, @Damage)COMMIT

  4. 您应该在数据库中创建一个包含获取数据所需的所有逻辑的存储过程,而不是在应用程序中编写查询。然后您的应用程序将简单地调用一个单词存储过程,而不是使用一个代表您的 t-sql 的巨大字符串。您还可以实际测试您的存储过程并确保它在不涉及应用程序的情况下工作。

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 2014-03-24
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多