У меня есть простое приложение, которое сохраняет данные пользователя и генерирует идентификатор, и на основании этого идентификатора их данные об образовании сохраняются в таблицу.
Это хранимая процедура:
CREATE PROCEDURE SAVE_USER_DETAILS
@tablePersonalDetails Resume_Personal_Details READONLY,
@tableEducation Resume_Education READONLY,
@returnValue BIGINT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @HeaderID BIGINT;
BEGIN TRANSACTION Tran_Resume
INSERT INTO YCTC_CV_USER_PERSONAL_DETAIL (CV_USER_NAME, CV_USER_FATHER_NAME, CV_USER_DOB,
CV_USER_MARITAL_STATUS,
CV_USER_PERMANENT_ADDRESS, CV_USER_PRESENT_ADDRESS,
CV_USER_CONTACT, CV_USER_EMAIL, CV_USER_GENDER)
SELECT
user_name, father_name, user_dob,
marital_status,
permanent_address, present_address,
user_contact, user_email, user_gender
FROM
@tablePersonalDetails
SET @HeaderID = (SELECT SCOPE_IDENTITY());
INSERT INTO YCTC_CV_USER_EDUCATION (CV_USER_ID, QUALIFICATION, INSTITUTION, BOARD_UNIVERSITY, PYEAR,RESULT)
SELECT
@HeaderID, qualification, institution, board_university, pyear, result
FROM
@tableEducation;
COMMIT TRANSACTION Tran_Resume
SET @returnValue = @HeaderID
SELECT @returnValue;
RETURN(0) ;
END
Ниже указан пользовательский тип таблицы:
CREATE TYPE Resume_Personal_Details AS TABLE
(
[user_name] [VARCHAR](50) NOT NULL,
[father_name] [VARCHAR](50) NOT NULL,
[user_dob] [DATE] NOT NULL,
[marital_status] [TINYINT] NULL,
[permanent_address] [VARCHAR](100) NOT NULL,
[present_address] [VARCHAR](100) NOT NULL,
[user_contact] [VARCHAR](20) NOT NULL,
[user_email] [VARCHAR](50) NOT NULL,
[user_gender] [TINYINT] NULL,
[Job_obj] [VARCHAR](MAX) NOT NULL
)
CREATE TYPE Resume_Education AS TABLE
(
[qualification] [VARCHAR](100) NOT NULL,
[institution] [VARCHAR](100) NOT NULL,
[board_university] [VARCHAR](100) NOT NULL,
[pyear] [VARCHAR](4) NOT NULL,
[result] [VARCHAR](10) NOT NULL
)
А ниже код C # (отправка всех строк вих пользовательская таблица и отправка идентификатора в код C #)
ReturnMessage _returnMessage = new ReturnMessage();
// Above class has 2 variables : bool ReturnStatus; string Message ;
try
{
string DateOfBirth = data.UserDOB.ToString().Replace("/", "-");
//.Substring(6, 4) + "-" + data.UserDOB.ToString().Substring(3, 2) + "-" + data.UserDOB.ToString().Substring(0, 2);
DataTable dt = new DataTable();
// Add columns
dt.Columns.Add(new DataColumn("user_name", typeof(string)));
dt.Columns.Add(new DataColumn("father_name", typeof(string)));
dt.Columns.Add(new DataColumn("user_dob", typeof(DateTime)));
dt.Columns.Add(new DataColumn("marital_status", typeof(int)));
dt.Columns.Add(new DataColumn("permanent_address", typeof(string)));
dt.Columns.Add(new DataColumn("present_address", typeof(string)));
dt.Columns.Add(new DataColumn("user_contact", typeof(string)));
dt.Columns.Add(new DataColumn("user_email", typeof(string)));
dt.Columns.Add(new DataColumn("user_gender", typeof(int)));
dt.Columns.Add(new DataColumn("Job_obj", typeof(string)));
// Add rows
dt.Rows.Add(data.UserName, data.FatherName, DateOfBirth, data.MaritalStatus,
data.UserPermanentAddress, data.UserPresentAddress,
data.Contact, data.UserEmail, data.Gender, data.User_Job_Objective);
DataTable EducationDataTable = new DataTable();
EducationDataTable.Columns.Add(new DataColumn("qualification", typeof(string)));
EducationDataTable.Columns.Add(new DataColumn("institution", typeof(string)));
EducationDataTable.Columns.Add(new DataColumn("board_university", typeof(string)));
EducationDataTable.Columns.Add(new DataColumn("pyear", typeof(string)));
EducationDataTable.Columns.Add(new DataColumn("result", typeof(string)));
foreach(EducationDetails _educationalDetails in data.EducationDetails)
{
EducationDataTable.Rows.Add(_educationalDetails.Qualification,
_educationalDetails.Institution,
_educationalDetails.University,
_educationalDetails.Year,
_educationalDetails.Result);
}
long ReturnValue = 0;
DBHelper.Parameters[] colParameters = new DBHelper.Parameters[3] {
new DBHelper.Parameters("@tablePersonalDetails", dt),
new DBHelper.Parameters("@tableEducation", EducationDataTable),
new DBHelper.Parameters("@returnValue", "", ParameterDirection.Output),
};
int RetCount = objHelper.gExecuteNonQuery(CommandType.StoredProcedure, "SAVE_USER_DETAILS", colParameters);
intHeaderID = Convert.ToInt64(objHelper.oCommand.Parameters["@returnValue"].Value);
_returnMessage.Message = Convert.ToString(intHeaderID);
}
catch (Exception ex)
{
_returnMessage.Message = "Fail";
}
Когда вызывается ExecuteNonQuery()
, генерируется исключение, но все данные вставляются успешно.
Ошибка преобразования типа данных bigint в nvarchar
Из всех моих испытаний я уверен, что проблема заключается в хранимой процедуре, но что, это то, что я не получаю.
Еслилюбая другая информация требуется, сообщите, я предоставлю.