在代码后面使用sqldatasource返回范围标识

时间:2014-03-05 21:08:00

标签: c# asp.net

目前我正在通过以下方式使用sqldatasource从codebehind插入数据库。

SqlDataSource13.InsertParameters["name"].DefaultValue = ufn;
            SqlDataSource13.InsertParameters["mime_type"].DefaultValue = FileUpload1.PostedFile.ContentType;
            SqlDataSource13.InsertParameters["size"].DefaultValue = FileUpload1.PostedFile.ContentLength.ToString();
            SqlDataSource13.InsertParameters["extension"].DefaultValue = "";
            SqlDataSource13.InsertParameters["date"].DefaultValue = dt.ToShortDateString();
            SqlDataSource13.InsertParameters["type"].DefaultValue = ddlDocType.SelectedValue;
            SqlDataSource13.InsertParameters["description"].DefaultValue = tbDescription.Text;
            SqlDataSource13.Insert();

这很好用。但是我现在需要获取插入ID。我将select scope_identity添加到插入查询的末尾。以及带有direction = ouput的插入参数的参数。

SELECT @id = SCOPE_IDENTITY()
<asp:Parameter Name="id" Direction="Output" />

但是我需要弄清楚如何使用上面的设置来获取输出参数。

2 个答案:

答案 0 :(得分:0)

试试这个:

protected void SqlDataSource13_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
    string sID = e.Command.Parameters["@Identity"].Value.ToString();
}

取自here(不是C#,但想法就在那里)

答案 1 :(得分:0)

为了让自己更轻松,我切换到了linq to sql查询。

tableDataContext tdc = new tableDataContext();
doc d = new doc();
d.dpi = qs;
d.dn = ufn;
etc...
tdc.docs.InsertOnSubmit(d);
tdc.SubmitChanges();

// get current row insert id
int dID = d.id;

所以现在我已经使用了最近插入的doc id。 容易。

感谢无论谁写了这个example