是否可以调用一个存储过程,该过程将首先插入详细信息,最后将返回一个表。目前我已经为它编写了两个存储过程:一个用于插入,另一个用于获取详细信息。现在我正试图同时做这两件事。
我ExecuteScalar用于插入和ExecuteDataSet选择。
是否可以调用一个存储过程,该过程将首先插入详细信息,最后将返回一个表。目前我已经为它编写了两个存储过程:一个用于插入,另一个用于获取详细信息。现在我正试图同时做这两件事。
我ExecuteScalar用于插入和ExecuteDataSet选择。
如果您的存储过程使用 SELECT 返回数据(当然,我认为您需要读取该数据),那么您应该使用 SqlDataAdapter 及其 Fill 方法或使用 SqlCommand 上的 ExecuteReader 的 SqlDataReader
执行阅读器:
using(SqlConnection cn = new SqlConnection(...))
using(SqlCommand cmd = new SqlCommand(procName, cn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cn.Open()
    using(SqlDataReader r = cmd.ExecuteReader())
    {
        while(r.Read())
        {
            // read every row and use the field values .....
        }
    }    
}
SqlDataAdapter.Fill:
using(SqlConnection cn = new SqlConnection(...))
using(SqlCommand cmd = new SqlCommand(procName, cn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cn.Open()
    using(SqlDataAdapter da = new SqlDataAdapter(cmd)
    {
        DataTable dt = new DataTable();
        da.Fill(dt);
        // DataTable filled with the data returned by the last SELECT in your SP
        ......
    }    
}
SqlCommand.ExecuteReader或SqlDataAdapter .Fill将执行存储过程而不查看存储过程的作用,但他们希望返回某种表格数据以循环它
你写一个这样的程序
CREATE PROCEDURE SP_Name
(
 //PARAMETES
)
AS
BEGIN
//INSERT STATEMENT
//SELECT STATEMENT
END
并调用 ExecuteDataSet()
SqlConnection cn = new SqlConnectio(...)
SqlCommand cmd = new SqlCommand("procName", cn)
 {
     cmd.CommandType = CommandType.StoredProcedure;
     cn.Open();
     cmd.ExecuteScalar();
 }