2010-05-16 73 views
0

我有以下存储过程:插入存储过程不创建数据库记录

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 [email protected] 

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

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

set @usName='' 
select @usName=isnull(email,'') from members where [email protected] 

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 @[email protected] 

请注意,我已经“继承”这个存储过程和数据库。

我想从我的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以便插入。

感谢, 希德

回答

1

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

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

您需要:

  • 读出值,用户输入
  • 实际调用有问题的存储过程(直接或通过的SqlDataSource)
  • 然后可能重新绑定形式显示新数据
1

你吞咽由数据库在btnSave_Click事件处理程序抛出的所有异常。你应该没有Try/Catch区块或者对异常做一些事情(比如记录日志) - 代码意味着你没有异常(正如你已经注意到的那样)。

至于改变你的代码以获得插入 - 首先找出什么是异常,它会告诉你错误是什么,并可能告诉你(和我们,如果你发布它)如何修复它。

0

问题:

1.How我赶上可能从存储过程返回的错误信息?

这个问题,我想你可以测试数据库中的proc。你测试它通过,所以它是正确的

2.Please建议如何更改signup.aspx,以便插入发生。

,如果你保证你创建是正确的PROC,这样你就可以搜索信息,如何从互联网

相关问题