簡體   English   中英

SQL Server的輸出參數未打印到Web表單

[英]Output parameter from SQL Server not printing to web form

我有商店手續

create proc spAddEmployees  
@Name varchar(50),  
@Gender varchar(10),  
@Salary int,  
@EmployeeId int out  
as  
begin  
insert into tblEmployees values (@Name, @Gender, @Salary)  
select EmployeeId = SCOPE_IDENTITY()  
end  

它的輸出參數告訴用戶當前的scope_identity標記看起來像

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <table style="border: 1px solid black; font-family:Arial">
    <tr>
        <td>
            Employee Name
        </td>
        <td>
            <asp:TextBox ID="txtEmployeeName" runat="server"></asp:TextBox>
        </td>
    </tr>        
    <tr>
        <td>
            Gender
        </td>
        <td>
            <asp:DropDownList ID="ddlGender" runat="server">
                <asp:ListItem>Male</asp:ListItem>
                <asp:ListItem>Female</asp:ListItem>
            </asp:DropDownList>
        </td>
    </tr> 
    <tr>
        <td>
            Salary
        </td>
        <td>
            <asp:TextBox ID="txtSalary" runat="server"></asp:TextBox>
        </td>
    </tr>       
    <tr>
        <td colspan="2">
            <asp:Button ID="btnSubmit" runat="server" Text="Submit" 
                onclick="btnSubmit_Click" />
        </td>
    </tr>          
    <tr>
        <td colspan="2">
            <asp:Label ID="lblMessage" runat="server"></asp:Label>
        </td>
    </tr>  
</table>

和后面的代碼

 public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            //read from the config file so you don't have to hardcode the connection string
            string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
            //when you use the using statement the database connection is automatically closed for you
            using(SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand("spAddEmployees", con);

                cmd.CommandType = CommandType.StoredProcedure;


                cmd.Parameters.AddWithValue("@Name", txtEmployeeName.Text);
                cmd.Parameters.AddWithValue("@Gender",ddlGender.SelectedValue);
                cmd.Parameters.AddWithValue("@Salary", txtSalary.Text);


                SqlParameter outputParmeter = new SqlParameter();

                outputParmeter.ParameterName = "@EmployeeId";

                outputParmeter.SqlDbType = SqlDbType.Int;
                outputParmeter.Direction = ParameterDirection.Output;

                cmd.Parameters.Add(outputParmeter);

                con.Open();
                cmd.ExecuteNonQuery();

                string EmpId = outputParmeter.Value.ToString();
                lblMessage.Text = "Employee Id = " + EmpId;    


            }

        }
    }

該程序應在tblEmployees表中添加新行,然后將存儲過程的輸出參數輸出給用戶。 單擊該按鈕時,它將運行並將行添加到數字中,但是輸出參數未打印到屏幕上。 有什么想法嗎?

也許:

select EmployeeId = SCOPE_IDENTITY() 

在存儲過程中應為:

select @EmployeeId = SCOPE_IDENTITY() 

存儲過程中的語法不正確。
你應該用

select @EmployeeId = SCOPE_IDENTITY()  
       ^

檢索輸出參數的常用方法是通過命令集合。 我不確定在此過程中是否將參數替換為某處

string EmpId = cmd.Parameters["@EmplyeeId"].Value.ToString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM