我正在尝试从我的控制器插入数据库。我已经调试了,它永远不会进入异常。但是我无法看到db上的值。
这是我的sp:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[RegisterUser]
-- Add the parameters for the stored procedure here
@Username nvarchar(10),
@Password nvarchar(10),
@Mail nvarchar(10),
@Birthday date
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Users
(
Username,
Pass,
Mail,
Birthday
)
VALUES
(
@Username,
@Password,
@Mail,
@Birthday
)
END
在我的模型上,我使用了这种方法:
public bool registerUser(UserModel user)
{
bool isOk = false;
using (SqlConnection connection = DbConnection.OpenConnection2())
{
try
{
using (SqlCommand command = new SqlCommand("RegisterUser", connection))
{
command.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(command);
command.Parameters.Add(new SqlParameter("@UserName", SqlDbType.VarChar)).Value = user.userName.Trim();
command.Parameters.Add(new SqlParameter("@Password", SqlDbType.VarChar)).Value = user.password.Trim();
command.Parameters.Add(new SqlParameter("@Mail", SqlDbType.VarChar)).Value = user.mail.Trim();
command.ExecuteNonQuery();
}
}
catch (Exception e)
{
}
finally
{
if (connection.State.Equals(ConnectionState.Open))
{
connection.Close();
isOk = true;
}
}
}
return isOk;
}
为什么这不起作用的任何想法?
由于
答案 0 :(得分:0)
如果您不提供“@Birthday”参数,请在存储过程中将“@Birthday date”指定为“@Birthday date = NULL”,如下所示:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[RegisterUser]
-- Add the parameters for the stored procedure here
@Username nvarchar(10),
@Password nvarchar(10),
@Mail nvarchar(10),
@Birthday date = NULL
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Users
(
Username,
Pass,
Mail,
Birthday
)
VALUES
(
@Username,
@Password,
@Mail,
@Birthday
)
END
其余的代码对我来说都很好。
希望这会对你有所帮助。
答案 1 :(得分:0)
如果您以适当的方式使用异常处理,事情就很容易了。您正在吞下Ado.net抛出的异常。请按照以下步骤解决您的问题:
throw
块中添加catch
语句以获取抛出的异常。在制作中,您应该在以后调用函数或图层时捕获它。以下是应该有效的修改后的代码。
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@UserName", SqlDbType.VarChar)).Value = user.userName.Trim();
command.Parameters.Add(new SqlParameter("@Password", SqlDbType.VarChar)).Value = user.password.Trim();
command.Parameters.Add(new SqlParameter("@Mail", SqlDbType.VarChar)).Value = user.mail.Trim();
//Assuming that the user object has a field named Birthday
command.Parameters.Add(new SqlParameter("@Birthday", SqlDbType.Date)).Value = user.Birthday;
command.ExecuteNonQuery();
如果您遵循我的第一个建议,您几乎会遇到代码中出现的任何其他问题。
我希望它会以某种方式帮助你。谢谢!
答案 2 :(得分:0)
如果您愿意,可以将参数@Birthday提供为默认值:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[RegisterUser]
-- Add the parameters for the stored procedure here
@Username nvarchar(10),
@Password nvarchar(10),
@Mail nvarchar(10),
@Birthday date = NULL
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Users
(
Username,
Pass,
Mail,
Birthday
)
VALUES
(
@Username,
@Password,
@Mail,
@Birthday
)
END