【问题标题】:Update data table with new string使用新字符串更新数据表
【发布时间】:2013-01-25 10:50:04
【问题描述】:

我有以下TextChanged 事件-

 protected void DataList1_SelectedTextChanged(object sender, EventArgs e)
    {
        TextBox chk = (TextBox)sender;
        DataListItem item = (DataListItem)chk.NamingContainer;

        TextBox txt = (TextBox)DataList1.Items[item.ItemIndex].FindControl("aTextBox");
        string text = txt.Text;

        WebService1 ws = new WebService1();
        ws.updateA(text, newText)

    }

ws.updateA web 方法需要 text 是文本框中的原始文本,newText 是触发更改事件后的文本。

我的问题是如何区分原始文本和要在 web 方法中使用的 newText,因为该方法是使用新文本更新数据表使用原始文本进行更新?

SQL 是 -

UPDATE table SET term='" + newText + "' WHERE termText= '" + text + "'

【问题讨论】:

  • 所以您的 sql 中存在需要旧值的问题。这是无稽之谈,因为数据库最了解所有旧值。要识别记录,您通常使用主键。
  • 也许我需要更好的更新声明?
  • 您需要一个更好的数据库模型。这个表的主键是什么?通常你会使用一个连续的数字(在 SQL-Server IDENTITY(1,1) 中)作为 PK,然后你使用这个数字作为记录的标识符。那么term这一列就不需要识别了。
  • @Jambo SQL 真的很脆弱。
  • 我现在意识到我应该使用标识值而不是原始文本:/

标签: c# asp.net web-services onchange


【解决方案1】:

您确实应该使用主键来确定要更新的行。通过 where 子句中的文本字符串进行更新不是一个好习惯。

SelectedTextChanged 事件被触发时,控件的旧值在页面生命周期中被长期覆盖。

如果知道旧值很重要,您应该使用 ViewState 跨 PostBacks 坚持。

参考:How to: Save Values in View State

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多