c# - 在插入语句后从 SQL 数据库中检索自动增量 ID
问题描述
下面是我在将数据插入数据库后检索自动增量 ID 的代码。
但是,在将数据插入数据库之前,我得到了自动增量 ID。
插入数据库后如何获取自动增量 ID?
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
RetrievePRReqID();
}
}
//获取ID方法
private void RetrievePRReqID()
{
try
{
string query = "Select IDENT_CURRENT('tblPRRequest')";
if (sqlCon.State == ConnectionState.Closed)
{
sqlCon.Open();
}
SqlCommand cmd = new SqlCommand(query, sqlCon);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
int value = int.Parse(reader[0].ToString()) ;
txt_PRNO.Text = value.ToString();
}
}
catch(Exception)
{
throw;
}
finally
{
if(con.State == ConnectionState.Open)
{
con.Close();
}
}
}
//请求按钮方法
protected void btn_Request(object sender, EventArgs e)
{
string insertCmd = "INSERT INTO tblPRRequest (RequestTo,RequestFrom,RequestedByName) " +
"VALUES (@RequestTo,@RequestFrom,@RequestedByName)";
using (SqlConnection conn = new SqlConnection(cs))
{
conn.Open();
using (SqlCommand sqlcmd = new SqlCommand(insertCmd, conn))
{
sqlcmd.Parameters.Clear();
SqlCommand sqlCmd = new SqlCommand(insertCmd, sqlCon);
sqlcmd.Parameters.AddWithValue("@RequestTo", lblPurchasingDept.Text);
sqlcmd.Parameters.AddWithValue("@RequestFrom", ddlDept.SelectedItem.Text);
sqlcmd.Parameters.AddWithValue("@RequestedByName", SUserName.Text);
sqlcmd.ExecuteNonQuery();
}
}
***//After Insert into the table, I want to retrieve latest generated Auto Increment ID in here.***
}
解决方案
试试这个:
protected void btn_Request(object sender, EventArgs e)
{
string insertCmd = "INSERT INTO tblPRRequest (RequestTo,RequestFrom,RequestedByName) " +
"VALUES (@RequestTo,@RequestFrom,@RequestedByName)";
using (SqlConnection conn = new SqlConnection(cs))
{
conn.Open();
using (SqlCommand sqlcmd = new SqlCommand(insertCmd, conn))
{
sqlcmd.Parameters.Clear();
SqlCommand sqlCmd = new SqlCommand(insertCmd, sqlCon);
sqlcmd.Parameters.AddWithValue("@RequestTo", lblPurchasingDept.Text);
sqlcmd.Parameters.AddWithValue("@RequestFrom", ddlDept.SelectedItem.Text);
sqlcmd.Parameters.AddWithValue("@RequestedByName", SUserName.Text);
sqlcmd.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;
sqlcmd.ExecuteNonQuery();
}
}
***//After Insert into the table, I want to retrieve latest generated Auto Increment ID in here.***
sqlcmd.Parameters["@ID"].value; // Access it like this
}
如果您可以ExecuteNonQuery
更改 to ExecuteScalar
,那么它会更容易:ExecuteScalar、ExecuteReader 和 ExecuteNonQuery 之间有什么区别?
推荐阅读
- excel - 根据单元格值更改表格数据
- c++ - PCL八叉树std::bad_alloc c++
- yaml - Azure 管道参数格式化 YAML
- vb.net - 在作为 DataGridView 的 DataSource 的已排序 DataTable 中上下移动行不会更新视图
- javascript - Chrome 扩展的 Azure AD 应用重定向 URI
- angular - 无法从函数加载 img src
- javascript - 当我在带有溢出滚动的 div 中向下滚动时如何播放视频
- r - 将 quanteda 令牌对象中的所有项目取消列出到数据框中
- html - 即使使用滚动,我也想填充背景图像
- python - 从其他两个具有相似性的字典创建一个字典