增加sql ID列并将值放在Textbox中

时间:2014-05-13 20:33:39

标签: c# asp.net webforms

我无法使SQL ID(不是自动增量)增加,然后使用该值(alphanumaric)填充文本框。 我已跟随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值。

2 个答案:

答案 0 :(得分:0)

以下是我发现获取最后一个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;

答案 1 :(得分:0)

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

你不能这样做。

我会选择使用存储过程。

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

但您可以确定在线时会遇到问题,因为此解决方案无法正常处理并发...

我强烈建议存储过程

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