我正在尝试使用如下所示的参数运行存储过程:
存储过程:
CREATE PROCEDURE [dbo].[spPurchase]
@commodityName VARCHAR(10),
@startdate DATE,
@enddate DATE,
@tonnes FLOAT,
@lots INT,
@value FLOAT,
@ccy VARCHAR(3),
@clientref VARCHAR(50),
@clientid INT,
@userid INT
AS
BEGIN
........
........
........
END
执行此存储过程的C#代码:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["InventoryConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("spPurchase", conn);
cmd.Parameters.Add("@commodityName", SqlDbType.VarChar, 10).Value = ddlMetals.SelectedValue;
cmd.Parameters.Add("@startdate", SqlDbType.Date).Value = startDate.Value;
cmd.Parameters.Add("@enddate", SqlDbType.Date).Value = endDate.Value;
cmd.Parameters.Add("@tonnes", SqlDbType.Float).Value = Convert.ToDouble(tbQuantity.Value);
cmd.Parameters.Add("@lots", SqlDbType.Int).Value = DBNull.Value;
cmd.Parameters.Add("@value", SqlDbType.Float).Value = DBNull.Value;
cmd.Parameters.Add("@ccy", SqlDbType.VarChar, 3).Value = DBNull.Value;
cmd.Parameters.Add("@clientref", SqlDbType.VarChar, 50).Value = "EigerTest";
cmd.Parameters.Add("@clientid", SqlDbType.Int).Value = Convert.ToInt32(Utils.LoggedInUserId);
cmd.Parameters.Add("@userid", SqlDbType.Int).Value = Convert.ToInt32(Utils.LoggedInUsersAccountId);
cmd.CommandType = CommandType.StoredProcedure;
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
finally
{
cmd.Connection.Close();
}
存储过程从SQL Server运行良好,C#代码成功连接到数据库。但是,它不执行存储过程,也不会产生任何异常或错误。
查看我的数据库中的最近查询,看起来我的C#代码可能只是尝试创建存储过程而不是执行它。
谁能看到我做错了什么?
答案 0 :(得分:0)
在调试类似问题时,我发现问题出在我的存储过程中。默认情况下,它不会引发任何SQL错误。因此,我添加了RAISEERROR
语句,但即使这样也没有引起问题。我不得不将RAISEERROR
的严重性更改为> 10,然后才能浮现为C#。
之后,调试非常简单。我在C#中传递的参数类型不匹配,这导致IF语句在过程中失败。没有RAISEERROR
的话,调试起来确实很费劲。