2014-05-24 5 views
1

SQL Server를 사용하여 ASP.NET MVC 웹 응용 프로그램을 개발하고 있습니다.SQL Server 데이터베이스에 문을 삽입하십시오.

데이터베이스에 새 항목을 삽입하려고하는데 잘못된 작업을 이해하지 못합니다.

나는 라인에 예외를 얻을 :

command.ExecuteNonQuery(); 

코드는 다음과 같습니다

try 
      { 
       SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=UniversityManager;Integrated Security=True"); 

       using (connection) 
       { 
        //SqlCommand command = new SqlCommand(
        // "INSERT INTO Students VALUES(@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp);", 
        // connection); 
        connection.Open(); 
        String sql = "INSERT INTO Students(Id,Name,Surname,Year,PhoneNumber,Cnp) " + 
         "VALUES (@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp)"; 
        SqlCommand command = new SqlCommand(sql, connection); 
        command.Parameters.Add("@Id", SqlDbType.Int); 
        command.Parameters["@Id"].Value = 5; 

        command.Parameters.Add("@Name", SqlDbType.VarChar); 
        command.Parameters["@Name"].Value = collection.Name; 

        command.Parameters.Add("@Surname", SqlDbType.VarChar); 
        command.Parameters["@Surname"].Value = collection.Surname; 

        command.Parameters.Add("@Year", SqlDbType.Int); 
        command.Parameters["@Year"].Value = collection.Year; 

        command.Parameters.Add("@PhoneNumber", SqlDbType.VarChar); 
        command.Parameters["@PhoneNumber"].Value = collection.PhoneNumber; 

        command.Parameters.Add("@Cnp", SqlDbType.VarChar); 
        command.Parameters["@Cnp"].Value = collection.Cnp; 

        command.ExecuteNonQuery(); 
        connection.Close(); 
       } 

       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

감사합니다!

+0

무엇이 예외입니까? –

+0

System.Data.dll에서 'System.Data.SqlClient.SqlException'유형의 첫 번째 예외가 발생했습니다. – Teodora

+0

이 내 친구에 대한 도움을 받으려면 내부 예외를 제공해야합니다. – Derek

답변

2

YEAR은 Sql Server의 예약어입니다. 따라서 실제로 그 이름을 가진 열이있는 경우 참조 할 때마다 대괄호로 묶어야합니다.

String sql = "INSERT INTO Students(Id,Name,Surname,[Year],PhoneNumber,Cnp) " + 
       "VALUES (@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp)"; 

또 다른 가능성의 이름을 더 나은 변화는 Id 열입니다. 이 열의 IDENTITY 속성이 true로 설정되어 있으면 값을 설정하지 마십시오. 데이터베이스 엔진에 의해 자동으로 계산됩니다.

innerexception 메시지를 보면 하나 이상의 매개 변수에 데이터베이스 필드 크기에 허용 된 것보다 많은 텍스트가 포함되어 있기 때문에 문제가 발생한 것 같습니다.
당신은 String or binary data would be truncated 예외가 당신이 당신의 학생 테이블의 열 중 하나에 너무 큰 값을 삽입하려는 의미

// Assuming the Name field is defined as varchar(15) 
command.Parameters.Add("@Name", SqlDbType.VarChar, 15); 
command.Parameters["@Name"].Value = collection.Name; 
+0

[]를 사용했지만 여전히 작동하지 않습니다. – Teodora

+0

기본 예외 – Steve

+0

의 InnerException 속성에서 메시지를 읽으려고 시도하십시오. 아직 ID 제안을 따랐지만 아직 아무 것도 없습니다. – Teodora

1

(각 VARCHAR 매개 변수) 이런 식으로 뭔가를 시도 할 수 있습니다. 예를 들어 Name 필드의 최대 길이는 10이지만 15 자의 문자 이름을 삽입하려고합니다.

삽입하려는 값을 확인하고 열에 비해 너무 큰지 확인하십시오.

+0

지금이 하나 얻을 : 예외 : 붙어 : "열 'ID'테이블에 열 값을 삽입 할 수 없습니다 'UniversityManager.dbo.Students'; 열이 널을 허용하지 않습니다. INSERT가 실패합니다. 문이 종료되었습니다. "(System.Data.SqlClient.SqlException) System.Data.SqlClient.SqlException이 발견되었습니다." 'NULL'값을 'Id'열에 삽입 할 수 없습니다. 'table'UniversityManager.dbo.Students '; 열이 널을 허용하지 않습니다. INSERT가 실패합니다. 성명서가 종결되었습니다. "시간 : 5/24/2014 10:55:24 PM 글타래 (쓰레드) : Worker – Teodora

관련 문제