Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从存储过程调用选定值_C#_Sql Server_Select_Stored Procedures - Fatal编程技术网

C# 如何从存储过程调用选定值

C# 如何从存储过程调用选定值,c#,sql-server,select,stored-procedures,C#,Sql Server,Select,Stored Procedures,如果我有以下存储过程,如何在代码中调用所选的值,以便将其设置为变量 CREATE PROCEDURE [dbo].GetCourseIDFromCourseNumber( @courseNo int, @termId int, @courseId int OUTPUT ) AS BEGIN SELECT @courseId = CourseId FROM Course Where (CourseNumber = @courseNo AND TermId = @termId) 结束 C代

如果我有以下存储过程,如何在代码中调用所选的值,以便将其设置为变量

CREATE PROCEDURE [dbo].GetCourseIDFromCourseNumber(
 @courseNo int,
 @termId int,
 @courseId int OUTPUT
)
AS
BEGIN

SELECT @courseId = CourseId
FROM Course
Where (CourseNumber = @courseNo AND TermId = @termId)
结束

C代码

   objCommand.CommandType = CommandType.StoredProcedure;
            objCommand.CommandText = "GetCourseIDFromCourseNumber";

            objCommand.Parameters.AddWithValue("@courseNo", courseNumber);
            objCommand.Parameters.AddWithValue("@termId", term);
            objCommand.Parameters.AddWithValue("@section", section);

            //Create an Output parameter to store value from stored procedure
            SqlParameter courseIdParam = new SqlParameter("@courseId", SqlDbType.Int);
            courseIdParam.Direction = ParameterDirection.Output;
            objCommand.Parameters.Add(courseIdParam);

            //execute stored procedure
            DBConnect objDB = new DBConnect();
            SqlConnection connect = objDB.GetConnection();
            connect.Open();                                                   
            objCommand.ExecuteNonQuery();
            connect.Close();

            //read parameter value
            if (courseIdParam.Value != null)
            {
                var courseId = (int)courseIdParam.Value;
                Session["Course"] = courseId;
            } 
GetDataSet方法

创建函数而不是存储过程:

创建函数[dbo]。GetCourseIDFromCourseNumber @库塞诺国际酒店, @termId int 返回表 作为回报 选择CourseId 当然 其中CourseNumber=@courseNo和TermId=@TermId 您现在可以在任何查询中使用输出,例如:

选择CourseId 来自dbo.GetCourseIDFromCourseNumber123,1; 选择t* 来自MyT表 交叉应用dbo.GetCourseIDFromCourseNumber123,1 c 其中t.CourseId=c.CourseId
我个人喜欢将存储过程返回的值存储到DataTable而不是DataSet中;然而,在这种情况下,这完全是个人偏好。然后需要遍历DataTable行中的数据

请参阅以下代码:

string courseId;

DataTable myDataTable = new DataTable();
myDataAdapter.Fill(myDataTable);

foreach (DataRow dr in dt.Rows)
{
     courseId = dr["CourseId"].ToString();
}

由于海报添加了相关的C代码,很明显存储过程可能是合适的

如果存储过程只返回一个值而不是一个数据集,则最好将该值作为输出参数返回:

创建过程[dbo].GetCourseIDFromCourseNumber @库塞诺国际酒店, @termId int, @courseId int输出 像 开始 选择@courseId=courseId 当然 其中CourseNumber=@courseNo和TermId=@TermId 终止 现在在C中:

SqlCommand objCommand=新的SqlCommand; objCommand.CommandType=CommandType.StoredProcess; objCommand.CommandText=GetCourseIDFromCourseNumber; objCommand.Parameters。AddWithValue@courseNo,课程编号; objCommand.Parameters。AddWithValue@termId学期 //创建输出参数以存储存储过程中的值 SqlParameter courseIdParam=newSqlParameter@courseId,SqlDbType.Int; courseIdParam.Direction=ParameterDirection.Output; objCommand.Parameters.AddcourseIdParam; //执行存储过程 objCommand.ExecuteNonQuery; //读取参数值 ifcourseIdParam.Value!=无效的 { var courseId=intcourseIdParam.Value; }
你试过什么吗?如果不尝试创建命令类型为StoredProcedure的命令,请将所需参数添加到该命令,并最终执行该命令。如果你在执行过程中遇到任何错误,请回来。@我尝试过这样做并不幸运,但它不起作用,我也不确定我错在哪里了。我在我的代码中编辑和添加了catch中是否有任何异常?希望这两个值和术语都是相同的integers@un-幸运的是,没有任何例外。只是会话没有设置为超出您应该签出并停止使用的范围。AddWithValue-它可能会导致意外和令人惊讶的结果…他的应用程序会有什么不同?在我编写此初始答案时,他没有问题中的所有C代码。我更新了我的C代码。我尝试执行objCommand.ExecuteNonQuery:但由于没有连接而出错。因此,我将其更改为当前代码,现在我得到了一个关于连接如何未关闭且仍处于打开状态的错误
string courseId;

DataTable myDataTable = new DataTable();
myDataAdapter.Fill(myDataTable);

foreach (DataRow dr in dt.Rows)
{
     courseId = dr["CourseId"].ToString();
}