用于查找IDENT_CURRENT的Sql命令

时间:2013-07-17 16:57:14

标签: c# sql sql-server sqlcommand

我必须找到作为标识插入到列“ID_K”表KLIENT中的最后一个数字。我应该如何改进我的代码?

非常感谢。

  SqlCommand comm = new SqlCommand("IDENT_CURRENT klient", spojeni);
          //  SqlCommand comm = new SqlCommand("Select MAX (ID_K) FROM klient", spojeni);
            spojeni.Open();
            int max = (int)comm.ExecuteScalar();
            spojeni.Close();


            foreach (DataGridViewRow row in dtg_ksluzby.Rows)
            {
                if (Convert.ToBoolean(row.Cells[3].Value) == true) 
                {
                    SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz(text,pocet,akce,subkey) values(@val1,@val2,@val3,@val4) ", spojeni);
                    prikaz2.Parameters.AddWithValue("@val1", row.Cells["text"].Value);
                    prikaz2.Parameters.AddWithValue("@val2", row.Cells["pocet"].Value);
                    prikaz2.Parameters.AddWithValue("@val3", row.Cells["akce"].Value);
                    prikaz2.Parameters.AddWithValue("@val4", max + 1);
                    spojeni.Open();
                    prikaz2.ExecuteNonQuery();
                    spojeni.Close();
                }
            }

1 个答案:

答案 0 :(得分:3)

IDENT_CURRENT的正确语法是

 SqlCommand comm = new SqlCommand("SELECT IDENT_CURRENT ('klient')", spojeni);

请记住,IDENT_CURRENT定义为NUMERIC(38,0),所以我认为用于从ExecuteScalar获取返回值的最佳数据类型是Decimal

 decimal lastValue = (decimal)comm.ExecuteScalar();

或者,如果您的值不是太大,您可以使用

 int lastValue = Convert.ToInt32(comm.ExecuteScalar());

然而,这个命令,如MAX(K_ID)遇到了同样的问题。如果来自不同连接的某人在此调用和对表'klisluz'中插入的调用之间的表'klient'中插入新记录,则可能会为插入的最后一个标识值获取错误的编号。如果'klient'和'klisluz'之间存在任何关系,你应该解释一下,因为从表名和列名不清楚。