【问题标题】:Increment the sql ID column and put value in Textbox增加 sql ID 列并将值放入 Textbox
【发布时间】:2014-05-13 20:33:39
【问题描述】:

我无法让 SQL ID(不是自动递增)递增,然后让该值(字母数字)填充文本框。 我关注Stack Overflow 的增量和Stack Overflow 将值填充到文本框。我没有看到 ID 增加了,我的文本框仍然是空的。

谁能告诉我我做错了什么。

这是我遇到问题的代码:

    protected void Page_Load(object sender, Eventargs e)
    {
        string ID_upd = "UPDATE table SET ID = ID + 1";
        string ID_sel = "SELECT TOP 1 ID FROM table ORDER BY ID DESC";

        SqlConnection IDcon = new SqlConnection(Connection string);
        SqlCommand cmdupd = new SqlCommand(ID_upd, IDcon);
        SqlCommand cmdsel = new SqlCommand(ID_sel, IDcon);

        IDcon.Open();
        cmdupd.ExecuteNonquery();
        IDcon.Close();

        try
        {
            IDcon.Open();
            using (SqlDataReader read = cmdsel.ExecuteReader())
            {
                while (read.Read())
                {
                TextboxID.Text = (read["ID"].ToString());
                }
            }
        }
        finally
        {
            IDcon.close();
        }
    }

感谢您的帮助。

编辑:我已经在我的测试页面中运行了这个。我成功填充了文本框,但没有成功填充更新命令。收到的错误是:将 varchar 值“A12345”转换为数据类型 int 时转换失败。这也不是我最后一个 ID 值。

【问题讨论】:

  • 你用过调试器吗?您真的要更新所有行吗?
  • 这是错误的做法,这两个SQL命令之间可以更改ID。
  • 蒂姆,我会试试的。谢谢哈姆雷特,我需要将 ID 更新到下一个增量,然后将新的 ID 值放入文本框中。我应该分开命令并让加载页面分别进入每个命令吗?
  • 首先,您的更新语句正在更新表中的每一行,我非常怀疑这就是您的意思。其次,尝试设置断点并查看返回的值。
  • 本,你是对的,我只想更新 ID 列,但从我读到的更新命令应该只更新 ID 列。我是不是看错帖子了?

标签: c# asp.net webforms


【解决方案1】:

这是我发现的获取最后一个 ID 值并使其递增的内容。

    protected void Page_Load(object sender, Eventargs e)
    {
        string ID_sel = "SELECT TOP 1 ID FROM table ORDER BY ID DESC";

        SqlConnection IDcon = new SqlConnection(Connection string);
        SqlCommand cmdsel = new SqlCommand(ID_sel, IDcon);

        IDcon.Open();
        SqlDataReader read = cmdsel.ExecuteReader();

        read.Read();
        string a = read["ID"].ToString();

        TextboxID.Text = ();
        for (int i = 0; i < 1; i++)
        {
            string val = a.Substring(1, a.Length - 1);
            int newnumber = Convert.ToInt32(val) + 1;
            a = "B" + newnumber.ToString("000000");
        {
        TextBoxID.Text = a;
        IDcon.Close;

【讨论】:

    【解决方案2】:

    您正在使用用于数字的语法来“增加”字母数字字符串,这就是您在更新时收到错误的原因。

    你不能这样做。

    我会使用存储过程。

    作为最后的手段,对我来说是纯粹的邪恶是 3 陈述:
    1- 选择以获取最高 id
    2- C# 拆分和递增数字部分,然后组装 ID
    3- Sql 语句更新

    但是你可以肯定你在在线时会遇到问题,因为这个解决方案不能优雅地处理并发......

    我强烈建议使用存储过程

    我还认为您的 sql 在 UPDATE 语句中缺少 WHERE 子句:您确定要覆盖表中的每一行吗?

    【讨论】:

    • this one 是我找到的第一个。您可以修改它以满足您的需要。我会再次使用存储过程。
    • 我将代码转换为 C# 后添加了代码,但没有看到错误原因。
    • @user3549282 我认为你搞砸了......在我的回答中,我指的是你的错误原始代码:'UPDATE table SET ID = ID + 1'无法工作,因为您将字符串添加到整数,这就是您的原始代码出错的原因。现在您在新添加的 c# 代码中提到了一个错误,而没有关于这个新的未知错误的任何信息……您的新 c# 代码有错误吗?
    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多