[英]New Row into SQL Server with Data Set [asp.net, c#]
我有这个代码:
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from Szkoda";
cmd.Connection = cnn;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "Szkoda");
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataRow drow = ds.Tables["Szkoda"].NewRow();
drow["Likwidator"] = tbLikwidator.Text;
drow["FirmaObslugujaca"] = DdFirma.Text;
drow["StanSzkody"] = DdStan.Text;
drow["CzyRegres"] = DdRegres.Text;
drow["KrajZdarzenia"] = DdKraj.Text;
ds.Tables["Szkoda"].Rows.Add(drow);
da.Update(ds, "Szkoda");
问题是如何获取插入的记录ID? 我读了范围,但我不知道如何在上面的代码中使用它。
我想在保存新记录后获取最后一个ID以重定向到查看表单。 我正在寻找最简单的解决方案:)
您无法直接从DataAdapter的Update命令执行此操作。 您需要准备包含两个命令的自定义插入命令。 第一个插入您的记录,第二个返回您的连接中最后插入的ID
string insertText = @"INSERT INTO Szkoda (Likwidator,FirmaObslugujaca,
StanSzkody, CzyRegres, KrajZdarzenia)
values (@lik, @fir, @sta, @czy, @kra);
SELECT SCOPE_IDENTITY()";
SqlCommand cmd = new SqlCommand(insertText, connection);
cmd.Parameters.AddWithValue("@lik", tbLikwidator.Text);
cmd.Parameters.AddWithValue("@fir", DdFirma.Text);
cmd.Parameters.AddWithValue("@sta", DdStan.Text);
cmd.Parameters.AddWithValue("@cay", DdRegres.Text);
cmd.Parameters.AddWithValue("@kra", DdKraj.Text);
object result = cmd.ExecuteScalar();
if(result != null)
{
int lastInsertedID = Convert.ToInt32(result);
// now insert the row in your dataset table but instead of
// da.Update(ds, "Szkoda"); call
ds.Tables["Szkoda"].AcceptChanges();
}
当然,这应该与您现有的代码一起使用,但不是调用Update,而是调用AcceptChanges到您的数据表以确认表中的新记录
Aftre将记录插入表中(使用sql查询,而不是存储过程)来自c#代码,你可以使用Get Records函数来选择最后一个记录id(不推荐,因为在muliuser情况下,这将是错误的)使用max()fucntion。
select * from Szkoda where ID IN (select max(id) from Szkoda)
如果使用存储过程插入数据,则在存储过程中使用SCOPE_Identity()
,并使用Output参数获取c#代码中的值。
CREATE PROCEDURE dbo.testSP
@Col1 VARCHAR(50),
@Col2 VARCHAR(20),
@new_identity INT = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.TestTable(Col1, Col2) SELECT @Col1, @Col2;
SET @new_identity = SCOPE_IDENTITY();
END
GO
请参阅此存储过程中最后插入行的返回标识
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.