C# 在Web表单C和ASP中显示SQL表中具有Identity属性的ID
我用C#和ASP.net开发了一个简单的票证跟踪软件 我的问题是,我无法显示或打印数据库中的ID值。 我的应用程序运行良好,每次我填写web表单时,它都会更新数据库并生成一个新的ID号 我所有的代码都正常工作,只是没有显示数字 基本上,用户填写表单,然后进入成功提交页面。我希望数字显示在提交页面中 这是我的存储过程C# 在Web表单C和ASP中显示SQL表中具有Identity属性的ID,c#,sql,asp.net,forms,C#,Sql,Asp.net,Forms,我用C#和ASP.net开发了一个简单的票证跟踪软件 我的问题是,我无法显示或打印数据库中的ID值。 我的应用程序运行良好,每次我填写web表单时,它都会更新数据库并生成一个新的ID号 我所有的代码都正常工作,只是没有显示数字 基本上,用户填写表单,然后进入成功提交页面。我希望数字显示在提交页面中 这是我的存储过程 USE [TrackITApp] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo
USE [TrackITApp]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[StoredProcGetSupportTicket]
-- Add the parameters for the stored procedure here
@fname nvarchar(50),
@lname nvarchar(50),
@email nvarchar(50),
@severityID bigint,
@statusID bigint,
@departmentID bigint,
@issuetype bigint,
@issuedesc nvarchar(500),
@ticketnumber bigint OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO supporticket(fname,lname,email,severityID,statusID,departmentID,issuetype,issuedesc)
VALUES(@fname,@lname,@email,@severityID,@statusID,@departmentID,@issuetype,@issuedesc)
SET @ticketnumber=SCOPE_IDENTITY()
END
这是我的储蓄班
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.Security;
using System.Data.SqlClient;
namespace TrackIT
{
public class SupportTicket
{
#region Declarations
public string fname { get; set; }
public string lname { get; set; }
public string email { get; set; }
public int statusID { get; set; }
public string issuedesc { get; set; }
public int severityID { get; set; }
public int issuetype { get; set; }
public int departmentID { get; set; }
public int ticketnum { get; set; }
#endregion
#region Methods
public void Save()
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("StoredProcGetSupportTicket"))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterFName = new SqlParameter("@fname", SqlDbType.NVarChar, 50);
parameterFName.Value = fname;
cmd.Parameters.Add(parameterFName);
SqlParameter parameterLName = new SqlParameter("@lName", SqlDbType.NVarChar, 50);
parameterLName.Value = lname;
cmd.Parameters.Add(parameterLName);
SqlParameter parameterEmail = new SqlParameter("@email", SqlDbType.NVarChar, 50);
parameterEmail.Value = email;
cmd.Parameters.Add(parameterEmail);
SqlParameter parameterSeverity = new SqlParameter("@severityID", SqlDbType.BigInt);
parameterSeverity.Value = severityID;
cmd.Parameters.Add(parameterSeverity);
SqlParameter parameterStatus = new SqlParameter("@statusID", SqlDbType.BigInt);
parameterStatus.Value = statusID;
cmd.Parameters.Add(parameterStatus);
SqlParameter parameterDepartment = new SqlParameter("@departmentID", SqlDbType.BigInt);
parameterDepartment.Value = departmentID;
cmd.Parameters.Add(parameterDepartment);
SqlParameter parameterissuedesc = new SqlParameter("@issuedesc", SqlDbType.NVarChar, 500);
parameterissuedesc.Value = issuedesc;
cmd.Parameters.Add(parameterissuedesc);
SqlParameter parameterissuetype = new SqlParameter("@issuetype", SqlDbType.BigInt);
parameterissuetype.Value = issuetype;
cmd.Parameters.Add(parameterissuetype);
SqlParameter parameterticketnum = new SqlParameter("@ticketnumber", SqlDbType.BigInt);
parameterticketnum.Direction = ParameterDirection.Output;
parameterticketnum.Value = ticketnum;
cmd.Parameters.Add(parameterticketnum);
con.Open();
cmd.Connection = con;
cmd.ExecuteNonQuery();
cmd.ExecuteScalar();
int tickID = (int)Convert.ToInt32(ticketnum.ToString());
con.Close();
try
{
con.Open();
cmd.Connection = con;
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
finally
{
cmd.Dispose();
con.Close();
}
}
#endregion
}
}
}
}
最后,这里是aspx.cs,它获取更新数据库的所有信息:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.Security;
using System.Data.SqlClient;
namespace TrackIT
{
public partial class ticket : System.Web.UI.Page
{
#region Declarations
SupportTicket tk = new SupportTicket();
public int ticketnum { get; set; }
#endregion
#region Methods
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadCombos();
}
}
protected void LoadCombos()
{
ICollection<Severity> severity = Severity.GetSeverities();
listSeverity.DataTextField = "severitytype";
listSeverity.DataValueField = "sevid";
listSeverity.DataSource = severity;
listSeverity.DataBind();
ICollection<Status> status = Status.GetStatuses();
liststatus.DataTextField = "statustype";
liststatus.DataValueField = "statid";
liststatus.DataSource = status;
liststatus.DataBind();
ICollection<Department> deptartment = Department.GetDepartments();
ListDept.DataTextField = "deptname";
ListDept.DataValueField = "deptID";
ListDept.DataSource = deptartment;
ListDept.DataBind();
ICollection<Employee> employee = Employee.GetEmployee();
ListEmp.DataTextField = "EmployeeName";
ListEmp.DataValueField = "empID";
ListEmp.DataSource = employee;
ListEmp.DataBind();
ICollection<Type> type = Type.GetIssueType();
Listissuetype.DataTextField = "issuetype";
Listissuetype.DataValueField = "typeid";
Listissuetype.DataSource = type;
Listissuetype.DataBind();
}
protected void btnSubmit_Click(object sender, EventArgs ex)
{
tk.fname = fnamebox.Text;
tk.lname = lnamebox.Text;
tk.email = emailbox.Text;
tk.severityID = Convert.ToInt32(listSeverity.SelectedValue);
tk.statusID = Convert.ToInt32(liststatus.SelectedValue);
tk.departmentID = Convert.ToInt32(ListDept.SelectedValue);
tk.issuetype = Convert.ToInt32(Listissuetype.SelectedValue);
tk.issuedesc = BoxDetails.Text;
tk.Save();
tForm.Visible = false;
SubmitSuccess.Visible = true;
}
#endregion
}
}
让它在我提交的表格中打印出来
我没有收到任何错误。我只是不明白,如果我正在检索ticketnumber标识号,为什么它无法打印
非常感谢您提供的所有帮助。我认为问题在于您检索返回值的方式 不使用ticketnum: int tickID=(int)Convert.ToInt32(ticketnum.ToString()) 做一些更像这样的事情: int tickID=Convert.ToInt32(cmd.Parameters[“@ticketnumber”].Value)
希望这有帮助 具体说明代码和问题。。
SqlParameter parameterticketnum = new SqlParameter("@ticketnumber", SqlDbType.BigInt);
parameterticketnum.Direction = ParameterDirection.Output;
parameterticketnum.Value = ticketnum;
cmd.Parameters.Add(parameterticketnum);
con.Open();
cmd.Connection = con;
cmd.ExecuteNonQuery();
cmd.ExecuteScalar();
int tickID = (int)Convert.ToInt32(ticketnum.ToString());
con.Close();