我在asp.net和SQL Server 2005中工作。
我想知道如何从存储过程返回一个值,或者我们如何知道查询是否已在存储过程中成功执行。例如,我将一些数据插入SQL Server数据库,我想通过使用返回值检查它是否正确插入。这是代码
存储过程..
ALTER PROCEDURE [dbo].[practice]
-- Add the parameters for the stored procedure here
@thename varchar(50),
@thedate datetime,
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
insert into tblpractice (name,date) values (@thename,@thedate)
END
代码隐藏..
string name=txtname.Text.Trim();
DateTime date = Convert.ToDateTime(txtdate.Text);
try
{
SqlCommand cmd = new SqlCommand("practice", lcon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@thename", name);
cmd.Parameters.AddWithValue("@thedate", date);
lcon.Open();
cmd.ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
if (lcon != null)
{
lcon.Close();
}
}
答案 0 :(得分:1)
答案 1 :(得分:1)
好吧,simmilar到C#/ java sql server可以有try catch blocks
这是链接:
http://msdn.microsoft.com/en-us/library/ms175976.aspx
您可以预先形成错误处理(oracle可以更好地解决这个问题),或者您可以相对轻松地执行IF block
来解决您的问题。 F.E.如果你返回一些数字(必须是> 0),你可以对它进行预先检查,如果你在程序中的选择没有返回任何条目,则返回-1或者是什么。
这些是解决您的问题的最常用方法。
在您的情况下,您可以再次查询数据库,查找包含过程中已有值的条目,如果select count(*) FROM table where ....
返回值,则返回0/1
答案 2 :(得分:0)
ExecuteNonQuery
返回一个int,它是受查询影响的行数。在您的示例中,如果存储的proc成功执行,将插入一条记录,因此ExecuteNonQuery应返回1.
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx
当您处理using
个对象时,也应使用IDisposable
,例如
using (var lcon = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand("practice", lcon))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@thename", name);
cmd.Parameters.AddWithValue("@thedate", date);
lcon.Open();
return cmd.ExecuteNonQuery();
}
}
这相当于try catch finally
阻止,即无论是否有错误,它都会关闭你的连接。