我必须找到作为标识插入到列“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();
}
}
答案 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'之间存在任何关系,你应该解释一下,因为从表名和列名不清楚。