2017-06-03 4 views
0

を使用してSQLで最後に挿入されたレコードのIDを取得する方法ここで私は最後の行IDが必要私のコードはASP.net

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrWhiteSpace(Request.QueryString["id"])) 
    { 
     string clientId = Context.User.Identity.GetUserId(); 

     if (clientId != null) 
     { 

      int id = Convert.ToInt32(Request.QueryString["id"]); 
      customize1 customize = new customize1 
      { 
       client_id = clientId, 
       product_id = id, 
       paper_type = Labelpt.Text, 
       corner = Labelpc.Text, 
       shipping_type = Labelsp.Text, 
       text = TextBox3.Text, 

       amount = Convert.ToInt32(lbResult.Text) 

      }; 
      customizeModel model = new customizeModel(); 
      Label9.Text = model.Insertcustomize(customize); 
      con.Open(); 
      SqlCommand cmd2 = con.CreateCommand(); 
      cmd2.CommandType = CommandType.Text; 
      cmd2.CommandText = "select top 1 * from customize1 where client_id='"+clientId+"' order by Id desc "; 
      cmd2.ExecuteNonQuery(); 
      DataTable dt2 = new DataTable(); 
      SqlDataAdapter da2 = new SqlDataAdapter(cmd2); 
      da2.Fill(dt2); 
      foreach (DataRow dr2 in dt2.Rows) 
      { 
       customizeid = dr2["Id"].ToString(); 
      } 
      con.Close(); 
     } 
    } 
} 

ですが、私のクエリは、任意のvalue.Iもで私のクエリをチェックし生成しません。 SSMSとクエリは正常に動作していますが、ASPではデータを生成していないため、レコードを挿入するためにクラスとエンティティの関係の概念を使用しました。 解決方法

+1

あなたのコードは*データベースに*何かを挿入されていない、どのようなIDを探してるんですか? – David

+0

完全なクエリを更新しました。確認してください。 – Mickey

+0

まだデータベースに何も挿入していません。生成されたIDを取得するには、そのIDを生成するためにレコード*を挿入する必要があります。あなたがしようとしていることや問題が何であるかは、はっきりしていません。 – David

答えて

0

ブラザー2つの方法があります。たとえば

SELECT SCOPE_IDENTITY() 

一つは、挿入がこれを照会した後、あなたの行の場所を挿入したときである

INSERT INTO table_name (column1, column2, column3, ...) 
     VALUES (value1, value2, value3, ...); 
SELECT SCOPE_IDENTITY() 

それが挿入されたIDを与えますバック。

第二の方法は、このクエリです。

SELECT id FROM table ORDER BY id DESC LIMIT 1 

問題を解決するために苦労し続ける場合は、さらに質問してください。

+1

同じアトミック操作の一部ではないにしても、競合状態のために間違った識別子を非常に簡単に返すことができるという点は注目に値する。 – David