C#.NET:DataTable在插入后检索列

时间:2014-04-11 15:37:27

标签: sql-server-2008 c#-4.0

我想响应。在插入我的数据库之后写入字段“requestDate”的值。我执行SQL插入后,我有一个“select requestDate ...”语句,但我似乎无法让网页看到它。

我尝试过:Response.Write(dt.Rows[0]["requestDate"].ToString());但是我收到一条错误,指出“requestDate”不属于该表。 requestDate不是我的参数之一,但希望插入后我选择的选项允许我使用它。

实现这一目标的最佳方法是什么?谢谢!

dataAccess.cs:

public static SqlConnection DEV
    {
        get
        {
            return new SqlConnection(ConfigurationManager.ConnectionStrings["DEV"].ConnectionString);
        }
    }

public static DataTable ExecuteDataTable(string storedProcedureName, SqlConnection connection, params SqlParameter[] sqlParams)
    {
        SqlCommand command = new SqlCommand(storedProcedureName, connection);
        DataSet returnSet = new DataSet();
        if (sqlParams != null)
            command.Parameters.AddRange(sqlParams);
        command.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = command;
        adapter.Fill(returnSet);
        connection.Close();
        if (returnSet.Tables.Count > 0)
        {
            return returnSet.Tables[0];
        }
        return null;
    }

执行插入的页面后面的代码:

DataTable dt = new DataTable();
                dt = dataAccess.ExecuteDataTable
                (
                    "spInsert", dataAccess.DEV, new SqlParameter[2]
                    {
                        new SqlParameter ("@vRecID", hidIDs.Value),
                        new SqlParameter ("@vTransDate", txtTransDate.Text)     
                    }
                );

                Response.Write(dt.Rows[0]["requestDate"].ToString());

标记页:

<asp:HiddenField runat = "server" ID = "hidIDs" />
<asp:TextBox ID="txtTransDate" runat="server"></asp:TextBox>

SQL:

Insert Into Requests
    ( 
        transDate,  
        requestDate
    )

    Values 
    (
        @vTransDate, 
        getDate()
    )
    Select recID = SCOPE_IDENTITY() 

    Select requestDate from Requests
    Where recID = @vRecID   

2 个答案:

答案 0 :(得分:0)

你可以尝试返回&#34; returnSet.Tables [1]&#34; (下一个表)而不是&#34; returnSet.Tables [0]&#34;。 您的SQL有两个select语句,数据适配器可以用两个表填充数据集。

答案 1 :(得分:0)

“RequestDate不是参数”,这不是问题。您将返回包含requestDate列的select的结果,因此它应该在您的数据表中。我没有尝试重现你的代码,所以我不知道什么是bug,但你要做的是一种过时的访问数据的方式,最简单的复杂。

ORM是对象关联映射。一个简单的强类型ADO.net数据集也可能是好的(它生成yor返回实体)。因此,有两种简单的方法可以在c#中投射SQL结果。

ADO.Net strongly-typed dataset

这是一个实体框架教程(这是一个ORM):

Introduction to Entity Framework