我将SqlDataAdapter
填入Dataset
后创建IDENTITY
。我的问题是插入后我想得到主列的Id
值。例如,在插入后我想获取ButtonEdit1文本中的标识值,给出buttonedit1 editvalue为Select @IDentity
(这是我的主要列)。
除非使用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"]);
}
感谢。
{{1}}
答案 0 :(得分:2)
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;
}
答案 1 :(得分:1)
如果您将Adpater上的InsertCommand上的命令更改为此,那么您应该没问题
INSERT INTO SKMenu ( Caption ) VALUES ( @Caption);
SELECT Id, Caption FROM SKMenu WHERE id = SCOPE_IDENITY();
您也可以使用OUTPUT条款
更新命令应该类似于
UPDATE SKMenu SET Caption = @Caption WHERE ID = @id;
IIRC数据集非常智能,只要您在ds.AcceptChanges()
之后致电adap.Update()
,就知道何时使用更新或插入。