c# - SqlDataAdapter 插入后获取标识

标签 c# sql-server sqldataadapter

在将其填充到Dataset后,我创建了一个SqlDataAdapter。我的问题是,插入后我想获取主列的 IDENTITY 值。例如,插入后,给定的buttonedit1编辑值是Id(这是我的主列),我想在ButtonEdit1文本中获取Identity值。

除非使用像 Select @IDentity 这样的 SQL 命令,否则我可以这样做吗

谢谢。

public void Form1_Load(object sender,EventArgs e)
{
   try
   {
      SqlConnection con = new SqlConnection(@"ConString");

      con.Open();

      adap = new SqlDataAdapter("select Id,Caption from SKMenu where ID=-1",con);
      adap.Fill(ds, "Table");

      bs.DataSource = ds.Tables["Table"];

      buttonEdit1.DataBindings.Add("Text", bs, "Id");
      buttonEdit2.DataBindings.Add("Text", bs, "Caption");

      bs.AddNew();
}

private void button1_Click(object sender, EventArgs e)
{
   SqlCommandBuilder cv = new SqlCommandBuilder(adap);            

   bs.EndEdit();

   adap.Update(ds.Tables["Table"]);
}

最佳答案

    public static bool CreateEntity(object entity, out long id)
    {
        bool created = false;
        long newid = -1;

        DataTable table = new DataTable();

        using (SqlConnection conn = new SqlConnection(Provider.Connection()))
        {
            string sqlcreate = "select * from {0} where id = -1;";
            conn.Open();
            using (SqlDataAdapter da = new SqlDataAdapter(String.Format(sqlcreate, entity.GetType().UnderlyingSystemType.Name), conn))
            {

                using (SqlCommandBuilder build = new SqlCommandBuilder(da))
                {
                    using (DataSet ds = new DataSet())
                    {
                        da.Fill(ds);

                        DataRow dr = ds.Tables[0].NewRow();

                        ClassProperties.Update(entity, dr);
                        da.InsertCommand = build.GetInsertCommand();
                        da.InsertCommand.CommandText += ";SELECT SCOPE_IDENTITY()";
                        da.InsertCommand.Parameters.Clear();
                        for (int i = 1; i < dr.ItemArray.Length; i++)
                        {
                            da.InsertCommand.Parameters.AddWithValue("@p" + i, dr.ItemArray[i]);
                        }

                        var result = da.InsertCommand.ExecuteScalar();
                        if (result != null)
                        {
                            created = true;
                            newid = Convert.ToInt64(result);
                        }
                    }
                }
            }
        }

        id = newid;
        return created;
    }

关于c# - SqlDataAdapter 插入后获取标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513010/

相关文章:

c# - WinRT 为什么我会收到 UnauthorizedAccessException?

c# - 使用 C# 和 Visual Studio 开发 Xbox 应用程序

c# - SqlCommandBuilder() 为基础表而不是 View 创建插入/更新

sql-server - 如何使用 SCOPE_IDENTITY 检索最后插入的 ID

c# - 集合被修改枚举操作可能无法执行

c# 在 SqlDataAdapter 中使用 Parameters.AddWithValue

c# - 参数为空时如何解决歧义?

sql - 数据库占用的空间比表的总和还要多

sql-server - 是否可以在 SQL Agent 中自动执行 `EXEC tSQLt.RunAll`?

c# - 使用 SqlDataAdapter 更新数据库 View