2014-01-20 21 views

回答

0

INSERT語句不能返回任何內容。您必須執行SELECT才能獲得範圍標識。如果你想在一個聲明中執行它,你不能使用SqlDataSource.Insert。正如文檔所述,它返回一個int計算受該語句影響的行。

相反,你可以做這樣的事情:

string query = "INSERT INTO Product (Name) VALUES (@Name);Select SCOPE_IDENTITY();;"; 
SqlCommand sqlCommand = new SqlCommand(query, connection); 
connection.Open(); 
string NewID= sqlCommand.ExecuteScalar(); 

希望我幫助!

+0

非常感謝。但我想用sqlDatasource.Insert();有可能嗎? – user2955394

+0

查看我編輯的答案... –

0

如果你正在使用oracle,RETURNING INTO可能是你在找什麼。它允許您將新的ID保存在輸出變量中。我只用ExecuteNonQuery()用它的,所以如果您正在使用SQL Developer的工作可能會與Insert()

工作,OUTPUT可能有幫助,雖然我沒有用一個我自己呢。

0

在搜索互聯網3天后未找到可接受的答案;這是什麼在起作用:

使用插入一個用戶名並返回一個ID的例...

創建一個類似的存儲過程:

create procedure Users_Insert 
     @UserName varchar(25) 
    ,@UserId int = null output 
as 

insert into Users (UserName) values (@UserName) 

select @UserId = scope_identity(); 

return @UserId; 

現在在你的aspx頁面配置SqlDataSource的這樣:

<asp:SqlDataSource ID="dsUsers" runat="server" 
     ConnectionString="<%$ ConnectionStrings:dbConnection %>" 
     InsertCommand="Users_Insert" InsertCommandType="StoredProcedure" OnInserted="dsUsers_Inserted"> 
     <InsertParameters> 
      <asp:ControlParameter ControlID="txtUserName" Name="UserName" Type="String" PropertyName="Text" /> 
      <asp:Parameter Name="UserId" Type="Int32" Direction="ReturnValue" /> 
     </InsertParameters> 
    </asp:SqlDataSource> 

注OnInserted事件接線。現在

,在後面的代碼,或許在保存按鈕點擊事件,調用insert方法:

dsUsers.Insert(); 

最後,在我們以前的有線了dsUsers_Inserted方法,得到了認同:

protected void dsUsers_Inserted(object sender, SqlDataSourceStatusEventArgs e) 
{ 
    int userId = Convert.ToInt32(e.Command.Parameters["@UserId"].Value); 
} 

希望這可以幫助至少一個人。

快樂編碼!