C#-ExecuteNonQuery是';不执行存储过程
我正在尝试使用如下所示的参数运行存储过程: 存储过程:C#-ExecuteNonQuery是';不执行存储过程,c#,sql-server,stored-procedures,executenonquery,C#,Sql Server,Stored Procedures,Executenonquery,我正在尝试使用如下所示的参数运行存储过程: 存储过程: CREATE PROCEDURE [dbo].[spPurchase] @commodityName VARCHAR(10), @startdate DATE, @enddate DATE, @tonnes FLOAT, @lots INT, @value FLOAT, @ccy VARCHAR(3), @clientref VARCHAR(50),
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
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();
}
执行此存储过程的C#代码:
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
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代码似乎只是试图创建存储过程,而不是执行它
有人知道我做错了什么吗?调试类似问题时,我发现问题出在我的存储过程上。默认情况下,它不会引发任何SQL错误。所以我添加了一个
RAISEERROR
语句,但即使这样也没有引起问题。我必须将我的RAISEERROR
更改为使用>10的严重性,然后它才会显示为C
之后,就可以直接调试了。我在C#中传递的参数中存在类型不匹配,这导致过程中IF语句失败。如果没有
RAISEERROR
,调试起来真的很麻烦。在调试类似的问题时,我发现问题出在我的存储过程上。默认情况下,它不会引发任何SQL错误。所以我添加了一个RAISEERROR
语句,但即使这样也没有引起问题。我必须将我的RAISEERROR
更改为使用>10的严重性,然后它才会显示为C
之后,就可以直接调试了。我在C#中传递的参数中存在类型不匹配,这导致过程中IF语句失败。如果没有
RAISEERROR
的话,调试真的很麻烦。存储的进程在做什么?只是更新各种表。lots
在代码中是float
,但在db中是int
<代码>值在代码中是int
,但在db中是float
;这会导致问题吗?只需打开Sql profiler,看看会发生什么。当您说SP未执行且没有错误时,.Net正在向SP发送参数,但内部查询没有执行任何操作;您是否尝试过使用SQL Server探查器
。您可以看到SP及其传递给SQL Server的实际参数。从探查器中取出它并尝试从ssms调试存储的进程在做什么?只是更新各种表。lots
在代码中是float
,但在db中是int
<代码>值在代码中是int
,但在db中是float
;这会导致问题吗?只需打开Sql profiler,看看会发生什么。当您说SP未执行且没有错误时,.Net正在向SP发送参数,但内部查询没有执行任何操作;您是否尝试过使用SQL Server探查器
。您可以看到SP及其传递给SQL Server的实际参数。将其从探查器中取出,并尝试从SSMS进行调试