簡體   English   中英

插入存儲過程不會創建數據庫記錄

[英]Insert Stored Procedure does not Create Database Record

我有以下存儲過程:

ALTER PROCEDURE Pro_members_Insert
@id int outPut,
@LoginName  nvarchar(50),
@Password   nvarchar(15),
@FirstName  nvarchar(100),
@LastName   nvarchar(100),
@signupDate smalldatetime,
@Company    nvarchar(100),
@Phone  nvarchar(50),
@Email  nvarchar(150),
@Address    nvarchar(255),
@PostalCode nvarchar(10),
@State_Province nvarchar(100),
@City   nvarchar(50),
@countryCode    nvarchar(4),
@active bit,
@activationCode nvarchar(50)
AS 

declare @usName as  varchar(50)
set @usName=''
select @usName=isnull(LoginName,'') from members where LoginName=@LoginName

if @usName <> ''
begin
    set @ID=-3

    RAISERROR('User Already exist.', 16, 1)
     return 
end

set @usName=''
select @usName=isnull(email,'') from members where Email=@Email

if @usName <> ''
begin
    set @ID=-4

    RAISERROR('Email Already exist.', 16, 1)
     return 
end


declare @MemID as int
select @memID=isnull(max(ID),0)+1 from members

INSERT INTO members (
id,
LoginName,
Password,
FirstName,
LastName,
signupDate,
Company,
Phone,
Email,
Address,
PostalCode,
State_Province,
City,
countryCode,
active,activationCode)
VALUES (
@Memid,
@LoginName,
@Password,
@FirstName,
@LastName,
@signupDate,
@Company,
@Phone,
@Email,
@Address,
@PostalCode,
@State_Province,
@City,
@countryCode,
@active,@activationCode)

if @@error <> 0 
set @ID=-1
else
set @id=@memID

請注意,我已經“繼承”了這個存儲過程和數據庫。

我試圖從我的signup.aspx頁插入一條新記錄。 我的SQLDataSource如下:

 <asp:SqlDataSource runat="server" ID="dsAddMember" 
    ConnectionString="rmsdbuser"
    InsertCommandType="StoredProcedure" InsertCommand="Pro_members_Insert" 
    ProviderName="System.Data.SqlClient">
   <InsertParameters>
     <asp:ControlParameter ControlID="txtLoginName" Type="String" />
     <asp:ControlParameter ControlID="txtPassword" Type="String" />
     <asp:ControlParameter ControlID="txtEmail" Type="String" />
     <asp:ControlParameter ControlID="txtCompany" Type="String" />
     <asp:ControlParameter ControlID="txtFirstName" Type="String" />
     <asp:ControlParameter ControlID="txtLastName" Type="String" />
     <asp:ControlParameter ControlID="txtAddress" Type="String" />
     <asp:ControlParameter ControlID="txtCity" Type="String" />
     <asp:ControlParameter ControlID="ddlState" type="String" />
     <asp:ControlParameter ControlID="ddlcountryCode" Type="String" />
     <asp:ControlParameter ControlID="txtPostalCode" Type="String" />
     <asp:ControlParameter ControlID="txtPhoneNumber" Type="String" />
   </InsertParameters>
 </asp:SqlDataSource>

btnSave的單擊處理程序如下:

Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSave.Click
    Try
        dsAddMember.DataBind()
    Catch ex As Exception

    End Try
End Sub

當我運行該頁面signup.aspx時,提供必填字段並單擊Submit,該頁面僅重新加載,數據庫表未反映新插入的記錄。

問題:

  1. 如何捕獲可能從sproc返回的錯誤消息?
  2. 請告知如何更改signup.aspx,以便進行插入。

謝謝,席德

您正在吞噬btnSave_Click事件處理程序中數據庫拋出的所有異常。 您應該沒有Try/Catch塊,或者對異常進行處理(例如記錄日志)-代碼意味着您松開了異常(如前所述)。

至於更改代碼以使插入發生-首先弄清楚異常是什么,它將告訴您錯誤是什么,並可能通知您(如果發布,則還包括我們)如何修復。

您從未調用任何方法來實際插入該新行! 調用.DataBind()只會將數據源中的現有數據加載到“綁定” UI元素(如文本框,網格和內容)中。

signup.aspx上的那些文本框等如何連接到數據源?

你需要:

  • 讀出用戶輸入的值
  • 實際調用有問題的存儲過程(直接或通過SqlDataSource)
  • 然后也許重新綁定表格以顯示新數據

問題:

1.如何捕獲可能從sproc返回的錯誤消息?

這個問題,我認為您可以在數據庫中測試proc。 你測試通過了,所以沒錯

2.請告知如何更改signup.aspx,以便進行插入。

如果您確定自己創建的proc是正確的,那么您可以搜索有關如何從Internet調用proc的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM