我试图用C#和ASP.NET中的存储过程更新表。我有一个自增量值表@ticketnumber
。麻烦正确地将字符串转换为INT与SQL,C#,ASP
我也有一个存储过程插入数据并创建ID的下一个值。
我有另一个应该更新此表的存储过程。
我最初的问题是,我一直得到
不能隐式转换字符串类型为int
然后我周围有点混乱,并得到了错误消失的错误。当我运行我的代码时,我会输入值,但Visual Studio然后会抛出“输入字符串不正确的格式”错误
为了澄清,我的存储过程插入工作得很好,但我不能使用ID
值更新它。
这里是我的我的存储过程的代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[StoredProcUpdateTicket]
@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
UPDATE supporticket
SET fname = @fname,
lname = @lname,
email = @email,
severityID = @severityID,
statusID = @statusID,
departmentID = @departmentID,
issuetype = @issuetype,
issuedesc = @issuedesc
WHERE
ticketnumber = @ticketnumber
SET @ticketnumber = SCOPE_IDENTITY()
RETURN @ticketnumber
END
这里是我的C#代码更新:
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 UpdateTicket
{
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; }
public void Update()
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("StoredProcUpdateTicket"))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter paramFName = new SqlParameter("@fname", SqlDbType.NVarChar, 50);
paramFName.Value = fname;
cmd.Parameters.Add(paramFName);
SqlParameter paramLName = new SqlParameter("@lName", SqlDbType.NVarChar, 50);
paramLName.Value = lname;
cmd.Parameters.Add(paramLName);
SqlParameter paramEmail = new SqlParameter("@email", SqlDbType.NVarChar, 50);
paramEmail.Value = email;
cmd.Parameters.Add(paramEmail);
SqlParameter paramSeverity = new SqlParameter("@severityID", SqlDbType.BigInt);
paramSeverity.Value = severityID;
cmd.Parameters.Add(paramSeverity);
SqlParameter paramStatus = new SqlParameter("@statusID", SqlDbType.BigInt);
paramStatus.Value = statusID;
cmd.Parameters.Add(paramStatus);
SqlParameter paramDepartment = new SqlParameter("@departmentID", SqlDbType.BigInt);
paramDepartment.Value = departmentID;
cmd.Parameters.Add(paramDepartment);
SqlParameter paramissuedesc = new SqlParameter("@issuedesc", SqlDbType.NVarChar, 500);
paramissuedesc.Value = issuedesc;
cmd.Parameters.Add(paramissuedesc);
SqlParameter paramissuetype = new SqlParameter("@issuetype", SqlDbType.BigInt);
paramissuetype.Value = issuetype;
cmd.Parameters.Add(paramissuetype);
SqlParameter paramticketnum = new SqlParameter("@ticketnumber", SqlDbType.BigInt);
paramticketnum.Direction = ParameterDirection.Output;
paramticketnum.Value = ticketnum;
cmd.Parameters.Add(paramticketnum);
try
{
con.Open();
cmd.Connection = con;
cmd.ExecuteNonQuery();
int tickID = Int32.Parse(cmd.Parameters["@ticketnumber"].Value.ToString());
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
finally
{
cmd.Dispose();
con.Close();
}
}
}
}
}
}
最后,在这里我实现我的更新
protected void btnUpdate_Click(object sender, EventArgs e)
{
upd.ticketnum = Int32.Parse(ticketnumberbox.ToString().Trim());
upd.fname = fnamebox.Text;
upd.lname = lnamebox.Text;
upd.email = emailbox.Text;
upd.severityID = Convert.ToInt32(listSeverity.SelectedValue);
upd.statusID = Convert.ToInt32(liststatus.SelectedValue);
upd.departmentID = Convert.ToInt32(ListDept.SelectedValue);
upd.issuetype = Convert.ToInt32(Listissuetype.SelectedValue);
upd.issuedesc = BoxDetails.Text;
upd.Update();
uForm.Visible = false;
UpdateSuccess.Visible = true;
}
我的问题在于为ticketnumber创建一个文本框,并能够使用该用户输入来更新数据库。
在此先感谢。
总是使用TryParse –
你的主要问题似乎是:你需要**将'ticketnumber'传递给你的更新存储过程 - 并且更新将* * NOT **产生一个新的“ID” - 你只是**更新**现有的行 - 所以使用SCOPE_IDENTITY并返回一个ID在这里毫无意义...... –