当前位置:编程学习 > C#/ASP.NET >>

比较麻烦的问题

使用了一个 DetailsView 控件来增加记录,增加一切正常。
表中有一个字段是主键 ID ,并且 ID 是自增列,请问如何在 

DetailsView1_ItemInserted   这个事件中 得到刚刚新增的自增列(主键ID)的值?


在更新时得到这个主键很简单,代码如下:但Inserted后怎么得到?

 protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
        {
            int intID = e.Keys[0].ToString();       //更新后得到主键的值     
        } --------------------编程问答-------------------- 重新填充数据 --------------------编程问答-------------------- 举个例子,实际操作不建议这样使用


Private SQL_ADD_ORDER_SALE As String = "INSERT INTO tb_OrderSale (UserID,Money,OrderTime,Status) " & _
                                            "Values({0},{1},'{2}',{3});SELECT @@IDENTITY"
Public Function AddOrderSale(ByVal UserID As Integer, ByVal Money As Decimal, ByVal OrderTime As DateTime, ByVal Status As Integer) As Integer
            Dim dbcom As New DBcommon
            Return DirectCast(dbcom.GetDataSet(String.Format(SQL_ADD_ORDER_SALE, UserID, Money, OrderTime, Status)), DataSet).Tables(0).Rows(0).Item(0)
End Function
--------------------编程问答-------------------- 补充一个数据库操作的类DBcommon


    Public Class DBcommon
        Private SQL_CONNECTION_STRING As String = ConfigurationSettings.AppSettings("ConnectionString")
        '执行SQL语句,不返回数据
        Public Function ExeSQL(ByVal strSQL As String) As String
            Dim Conn As SqlConnection
            Dim MyCommand As SqlCommand
            Dim s As String = ""
            Dim errorMessages As New StringBuilder()

            Conn = New SqlConnection(SQL_CONNECTION_STRING)
            MyCommand = New SqlCommand(strSQL, Conn)

            Try
                MyCommand.Connection.Open()
                MyCommand.ExecuteNonQuery()
                MyCommand.Connection.Close()
            Catch ex As SqlException
                Dim i As Integer
                For i = 0 To ex.Errors.Count - 1
                    errorMessages.Append("Index #" & i.ToString() & ControlChars.NewLine _
                        & "Message: " & ex.Errors(i).Message & ControlChars.NewLine _
                        & "LineNumber: " & ex.Errors(i).LineNumber & ControlChars.NewLine _
                        & "Source: " & ex.Errors(i).Source & ControlChars.NewLine _
                        & "Procedure: " & ex.Errors(i).Procedure & ControlChars.NewLine)
                Next i
                s = errorMessages.ToString()
            End Try
            Return s
        End Function

        '执行SQL语句,返回数据
        Public Function GetDataSet(ByVal sql As String) As DataSet
            Dim conn As SqlConnection
            Dim da As SqlDataAdapter
            Dim ds As New DataSet

            Try
                conn = New SqlConnection(SQL_CONNECTION_STRING)
                da = New SqlDataAdapter(sql, conn)
                ds = New DataSet()
                da.Fill(ds)
            Catch ex As SqlException
            End Try
            Return ds
        End Function
    End Class

--------------------编程问答-------------------- 注意:以上都是非商业化代码,问题比较多,仅供参考! --------------------编程问答-------------------- 碰到这种情况往往是数据库的表结构设计得不够合理。。
一般情况下,需要你获取主键的表,都不要去用自增长字段。。
只在类似操作历史的记录表这样的,才用自增长字段作主键,因为这时我们只要知道谁做了什么操作,主键小的为较早的操作。。 --------------------编程问答-------------------- 获取sql server中自增字段的值
SELECT @@IDENTITY;

要获取主键的表,用自增没有什么不合理,
只是说为了更好的与其它数据库通用一般现在不怎么用了,5年前大家写代码的时候主键没有不是自增的

--------------------编程问答-------------------- 在进行插入操作的SQL语句中,加入  SELECT @@IDENTITY;  
这样返回的值就有刚才插入的ID了, --------------------编程问答-------------------- 重新连接一下数据库查询OK --------------------编程问答-------------------- 如果在一个页面常用要用常类型的值。我常这样处理

1:放一个隐藏的控件记录值。这样就可以一直用,而且被改后,用的值也是新值。很方便。

2:在代码中放一个属性即:

  //道理跟第一个是差不多的
  private string _hiddenValue="";
  private string HiddenValue
  {
    get {return _hiddenValue;}
    set {_hiddenValue=value;}
  }

  
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,