这是一个我想要实现的简单任务,但ASP.NET使其变得非常困难,几乎不可能。我跟着这个问题
Running a Stored Procedure in C# Button但发现ExecuteNonQuery
不会返回查询的输出。
我尝试了另一种方法,但似乎无法通过这种方式传递参数
SqlConnection myConnection = new SqlConnection(myconnectionString);
SqlCommand myCommand = new SqlCommand();
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.CommandText = "usp_GetCustomer";
myCommand.SelectParameter <-- does not exist
有人可以编写这个简单的代码,我该如何实现呢?基本上我将@username
和@month
(两个字符串)传递给存储过程,它返回一个我想要捕获并分配给标签控件的数字。
谢谢
我的查询输出是这个。它运行一个复杂的查询,创建一个临时表,然后运行
select @@rowcount
我正在捕捉它。
答案 0 :(得分:3)
如果您确实需要结果集中的数据,请不要使用SqlCommand.ExecuteNonQuery()
。
确保您的程序使用set nocount on
然后使用SqlCommand.ExecuteScalar()
return (int)myCommand.ExecuteScalar(); // value of select @@rowcount
编辑:至于您的参数:
myCommand.Parameters.AddWithValue("@username","jsmith");
myCommand.Parameters.AddWithValue("@month","January");
答案 1 :(得分:1)
我更喜欢使用linq-to-sql来处理存储过程。创建一个linq-to-sql模型,在其中添加要调用的SP。这将使SP作为生成的数据上下文的函数公开,其中参数是普通的C#函数。返回的值将作为C#对象的集合公开。
如果你有多个来自SP的结果,事情变得有点复杂,但仍然很直接。
答案 2 :(得分:1)
使用命令的Parameters
集合设置参数,使用ExecuteScalar
运行查询并从单行单列结果中获取值。
使用using
块确保连接和命令在任何情况下都已关闭并正确处理。请注意,您必须提供与命令对象的连接:
int result;
using (SqlConnection connection = new SqlConnection(myconnectionString)) {
using (SqlCommand command = new SqlCommand(connection)) {
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "usp_GetCustomer";
command.Parameters.Add("@username", SqlDbType.VarChar).Value = username;
command.Parameters.Add("@month", SqlDbType.VarChar).Value = month;
connection.Open();
result = (int)myCommand.ExecuteScalar();
}
}
答案 3 :(得分:0)
从SQL Server获取返回值的简单代码
SqlConnection myConnection = new SqlConnection(myconnectionString);
SqlCommand myCommand = new SqlCommand();
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.CommandText = "usp_GetCustomer";
myCommand.Parameters.Add("@USER_NAME", SqlDbType.VarChar).Value = sUserName; // user name that you pass to the stored procedure
myCommand.Parameters.Add("@Month", SqlDbType.VarChar).Value = iMonth; //Month that you pass to the stored procedure
// to get return value from the stored procedure
myCommand.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
myConnection .Open();
myCommand.ExecuteScalar();
// Returnvalue from the stored procedure
int iReturnValue = Convert.ToInt32(command.Parameters["@ReturnValue"].Value);
答案 4 :(得分:0)
using(SqlConnection myConnection = new SqlConnection(myconnectionString))
{
SqlCommand myCommand = new SqlCommand();
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.CommandText = "usp_GetCustomer";
myCommand.Parameters.Add("@USER_NAME", SqlDbType.VarChar).Value = sUserName; // user name that you pass to stored procedure
myCommand.Parameters.Add("@Month", SqlDbType.VarChar).Value = iMonth; // Month that you pass to stored procedure
// to get return value from stored procedure
myCommand.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
myConnection .Open();
myCommand.ExecuteScalar();
// Returnvalue from stored procedure
return Convert.ToInt32(command.Parameters["@ReturnValue"].Value);
}