我有以下存储过程:
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
请注意,我已经“继承”了这个sproc和数据库。
我正在尝试从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,提供必填字段并单击“提交”,页面只是重新加载,数据库表不会反映新插入的记录。
问题:
谢谢, SID
答案 0 :(得分:1)
您正在吞噬数据库在btnSave_Click
事件处理程序中抛出的所有异常。你应该没有Try/Catch
块或者做异常事情(比如记录它) - 代码意味着你失去了异常(正如你已经注意到的那样)。
至于更改代码以使插入发生 - 首先弄清楚异常是什么,它将告诉你错误是什么,并且可能告诉你(以及我们,如果你发布它)如何解决它。
答案 1 :(得分:1)
你永远不会调用任何方法来实际插入新行!调用.DataBind()
只会将数据源中的现有数据加载到“绑定”UI元素(如文本框和网格和内容)中。
你的signup.aspx上的那些文本框等如何连接到数据源?
你需要:
答案 2 :(得分:0)
问题:
1.如何捕获可能从sproc返回的错误消息?
问题,我认为你可以在数据库中测试proc。你测试它通过,所以它是正确的
2.请告知如何更改signup.aspx以便插入。
如果您确保您创建的过程是正确的,那么您可以搜索如何从互联网上调用过程的信息