在将其填充到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/