[SQL] ExecuteScalar는 (); SCOPE_IDENTITY ()로 생성 "System.InvalidCastException : 지정한 캐스트가 잘못되었습니다"[중복]
SQLExecuteScalar는 (); SCOPE_IDENTITY ()로 생성 "System.InvalidCastException : 지정한 캐스트가 잘못되었습니다"[중복]
나는 (텍스트 상자와 checkboxlist를 통해) 다양한 데이터를 수용 형태가했습니다와 클릭 이벤트에 그들은 다음 테이블 및 선택합니다 SCOPE_IDENTITY에 모든 데이터를 삽입 checkboxlist 항목의 삽입에서 사용할 수있는 변수에 저장 다른 테이블로 루프를 사용
! 많은 답변 예에 따라이 .. 완벽하게 작동해야하지만 날이 오류를 제공합니다 :
Exception Details: System.InvalidCastException: Specified cast is not valid.
Line 66: int NewBrandId = (int)comm.ExecuteScalar();
여기 내하는 LinkButton 방법 코드는 다음과 같습니다
protected void lnkbtnUploadAndSubmit_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MOODbCenterConnection"].ConnectionString);
SqlCommand comm = new SqlCommand("INSERT INTO Brands (BrandName, BrandLogo, BrandWebsite, IsBrandVisible) VALUES (@Name, @Logo, @Website, @IsVisible); SELECT scope_identity();", conn);
comm.Parameters.Add("@Name", System.Data.SqlDbType.NVarChar, 50);
comm.Parameters["@Name"].Value = txtbxBrandName.Text;
comm.Parameters.Add("@Logo", System.Data.SqlDbType.Text);
comm.Parameters["@Logo"].Value = fileuploadLogo.PostedFile.FileName;
comm.Parameters.Add("@Website", System.Data.SqlDbType.Text);
comm.Parameters["@Website"].Value = txtbxWebsite.Text;
comm.Parameters.Add("@IsVisible", System.Data.SqlDbType.Bit);
comm.Parameters["@IsVisible"].Value = chkbxIsPublished.Checked;
conn.Open();
int NewBrandId = (int)comm.ExecuteScalar();
conn.Close();
foreach (ListItem li in chkbxlstCuisines.Items)
{
if (li.Selected)
{
conn.Open();
SqlCommand comm2 = new SqlCommand("INSERT INTO BrandCuisines (CuisineId, BrandId) VALUES (@CuisineId, @NewBrandId)", conn);
comm2.Parameters.Add("@CuisineId", System.Data.SqlDbType.Int);
comm2.Parameters["@CuisineId"].Value = li.Value;
comm2.Parameters.Add("@NewBrandId", System.Data.SqlDbType.Int);
comm2.Parameters["@NewBrandId"].Value = NewBrandId;
comm2.ExecuteNonQuery();
conn.Close();
}
}
}
내가 비주얼 스튜디오의 SQL 서버 익스프레스에서 직접 실행하면 편집 이상하게 쿼리는 잘 작동합니다!
이 이상한 문제에 대한 이상한 설명
alexb에 의한 최초의 솔루션 :
Example : int NewBrandId = System.Convert.ToInt32(comm.ExecuteScalar());
내게로 두 번째 해결 방법 :
감사 녀석과 나는 다른 사람을 도울 바랍니다!
해결법
-
==============================
1.정확히 무슨 comm.ExecuteScalar () 반환? 아마 긴 또는 더블 객체로 포장 반환합니다. 정확히 기억하지만 1 ~ 2 년 전 얼굴 뭔가했다처럼 보인다 수 없습니다.
정확히 무슨 comm.ExecuteScalar () 반환? 아마 긴 또는 더블 객체로 포장 반환합니다. 정확히 기억하지만 1 ~ 2 년 전 얼굴 뭔가했다처럼 보인다 수 없습니다.
-
==============================
2.당신은 SQL을 변경할 수 있다면, 더 쉬운 방법은하는 것
당신은 SQL을 변경할 수 있다면, 더 쉬운 방법은하는 것
SELECT CONVERT(int, SCOPE_IDENTITY())
-
==============================
3.Dimi 말했듯이, 신원은 SQL 숫자 (.NET 진수)입니다. 이 작업을해야합니다 :
Dimi 말했듯이, 신원은 SQL 숫자 (.NET 진수)입니다. 이 작업을해야합니다 :
decimal decimalBrandId = (decimal)comm.ExecuteScalar(); int NewBrandId = (int)decimalBrandId;
-
==============================
4.) (SCOPE_IDENTITY에 대한 설명서에서
) (SCOPE_IDENTITY에 대한 설명서에서
Return Types numeric(38,0)
쉬운 솔루션은 다음과 같은 것이다 그래서
DECLARE @ReturnValue INT; /* Do your insert stuff here. */ SELECT @ReturnValue = SCOPE_IDENTITY(); SELECT @ReturnValue;
-
==============================
5.SET NOCOUNT ON을 추가하려고; 삽입하기 전에.
SET NOCOUNT ON을 추가하려고; 삽입하기 전에.
from https://stackoverflow.com/questions/4413178/executescalar-with-scope-identity-generating-system-invalidcastexception by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 빈 반환 카운트 대신 0 (0) | 2020.07.10 |
---|---|
[SQL] SQL Server의 테이블 TABLENAME을 만들보기 (0) | 2020.07.10 |
[SQL] 검사 시간은 두 번 (시간 데이터 형식) 사이 인 경우 (0) | 2020.07.10 |
[SQL] SQL에서 날짜별로 필터 (0) | 2020.07.10 |
[SQL] 오라클 IN 절에서 LIKE를 사용하여 (0) | 2020.07.10 |