UPDATE命令c#出现问题

时间:2016-06-07 19:25:00

标签: c# sql ms-access

好好主持这一段时间,我无法理解为什么它没有更新我的数据库.....我没有得到错误消息它运行得很好。代码

         if (e.KeyCode == Keys.Enter)
        {
            // #WORK
            string searchtext = txtAssetScanned.Text;
            string searchcmd = "UPDATE " + lstCompCode.SelectedItem.ToString() + " SET " + lstCompCode.SelectedItem.ToString() + ".[Inventory Status]= \"FOUND\" WHERE [Inventory number] like '*" + searchtext + "';";
            MessageBox.Show(searchcmd);
            myConnection.Open();
            OleDbCommand search = new OleDbCommand();
            search.Connection = myConnection;
            search.CommandText = searchcmd;
            search.ExecuteNonQuery();
            myConnection.Close();
        }

1 个答案:

答案 0 :(得分:1)

这里有一些东西出现:

  • 使用参数化查询。您应该使用参数化查询,以您当前的方式连接可能会导致语法问题,并使您容易受到SQL注入攻击。
  • 考虑使用单引号作为值。在SQL中设置字符串值时,应使用单引号'value'而不是双引号(即"value")。
  • SelectedItem上的SelectedValue 。请考虑使用SelectedValue属性而不是SelectedItem.ToString()来确保使用正确的值。
  • 可能不允许将表名称作为参数。如果您使用表名作为参数,在许多情况下可能会被拒绝(因为它们通常是为值保留),所以公平警告。
  • 仔细检查错别字。最后,确保您定位的属性正确且不包含任何拼写错误(例如Foo.[Inventory number]等)。

您可以按如下方式应用这些更改:

using(var connection = new OleDbConnection("{your-connection-string}"))
{
      // Build your query with parameters
      var query = "UPDATE ? SET [Inventory Status] = 'FOUND' WHERE [Inventory number] LIKE ?";
      using(var command = new OleDbCommand(query, connection))
      {
           connection.Open();
           // Add your parameters
           command.Parameters.AddWithValue("@table",lstCompCode.SelectedValue);
           command.Parameters.AddWithValue("@search", "*" + txtAssetScanned.Text);
           // Now that your queries are added, perform your update
           command.ExecuteNonQuery();
      }
}

可能的问题

正如我所提到的,某些数据库不允许您将表名作为参数传递而不依赖于存储过程,动态SQL等。您可能最好只是定义要直接使用的表:

var query = "UPDATE [YourTableName] SET [Inventory Status] = 'FOUND' WHERE [Inventory number] LIKE ?";

由于您无法通过via参数传递此信息,因此您可以考虑添加一些逻辑来确定使用哪些逻辑并对其进行硬编码以及一些卫生设施以避免可能的恶意行为。