【问题标题】:Insert Stored Procedure does not Create Database Record插入存储过程不创建数据库记录
【发布时间】:2010-05-16 07:02:17
【问题描述】:

我有以下存储过程:

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,提供必填字段并单击提交时,页面只是重新加载并且数据库表不反映新插入的记录。

问题:

  1. 如何捕获可能从存储过程返回的错误消息?
  2. 请告知如何更改 signup.aspx 以便插入。

谢谢, 席德

【问题讨论】:

    标签: asp.net sql-server-2005 stored-procedures


    【解决方案1】:

    您从未调用任何方法来实际插入新行!调用 .DataBind() 只会将数据源中的现有数据加载到“绑定”的 UI 元素(如文本框和网格等)中。

    signup.aspx 上的那些文本框等是如何连接到数据源的?

    你需要:

    • 读出用户输入的值
    • 实际调用有问题的存储过程(直接或通过SqlDataSource)
    • 那么可能会重新绑定表单以显示新数据

    【讨论】:

      【解决方案2】:

      您在btnSave_Click 事件处理程序中吞下了数据库抛出的所有异常。您应该没有 Try/Catch 块或对异常执行某些操作(例如记录它)-代码意味着您放弃了异常(正如您已经指出的那样)。

      至于更改代码以使插入发生 - 首先弄清楚异常是什么,它会告诉您错误是什么,并且可能会通知您(以及我们,如果您发布它)如何修复它。

      【讨论】:

        【解决方案3】:

        问题:

        1.如何捕捉存储过程中可能返回的错误信息?

        问题,我认为您可以在数据库中测试 proc。你测试它通过,所以它是正确的

        2.请告知如何更改 signup.aspx 以便插入发生。

        如果你确保你创建的过程是正确的,那么你可以搜索如何从互联网调用过程的信息

        【讨论】:

          猜你喜欢
          • 2012-03-15
          • 1970-01-01
          • 2021-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多