2017-12-20 36 views
0

Vehicle_StatusTrans_Income의 두 테이블이 있습니다.C# Insert 문 - SQL 열 이름으로 배열

Vehicle_Status 두 열 및 Vehicle_NumberStatus 포함되며 Vehicle_NumberTrans_Income의 열 이름있는 데이터로 구성된다.

배열에 Vehicle_Number의 데이터를로드하고 insert 문에 사용하고 싶습니다.

string[] vehicleActive = new string[100]; 

SqlCommand cmd = new SqlCommand("Select Vehicle_Number from [dbo].[Vehicle_Status] Where Status = 'Inactive'", con); 
cmd.CommandType = CommandType.Text; 

con.Open(); 
int a = 0; 

SqlDataReader dr = cmd.ExecuteReader(); 

while (dr.Read()) 
{ 
    vehicleActive[a] = dr["Vehicle_Number"].ToString(); 
    a++; 
} 

con.close(); 

for (int b = 0; b < a; b++) 
{ 
    cmd = new SqlCommand("Insert Into [dbo].[Trans_Income](Month, Particular,'"+vehicleActive[b]+"') VALUES (@Month, @Particular, @vehicleNo)", con); 

    con.Open(); 

    cmd.Parameters.AddWithValue("@Month", textBox2.Text); 
    cmd.Parameters.AddWithValue("@Particular", textBox2.Text); 
    cmd.Parameters.AddWithValue("@vehicleNo", textBox3.Text); 

    cmd.ExecuteNonQuery(); 
    con.Close();  
} 

는하지만 오류를 얻을

System.Data.SqlClient.SqlException : '.'BJW6719 '근처의 구문이 잘못되었습니다'

열 이름 중 하나는 BJW6719입니다. 아무도 도와 줄 수 없나요? 아니면이 일을하는 다른 방법이 있습니까? 미리 감사드립니다.

+0

그것은 귀하의 믹싱 데이터 및 메타 데이터처럼 들리 네요 일반적으로 데이터 모델의 나쁜 징조 인 ogether. 동일한 "유형"의 데이터가 포함 된 여러 개의 열이 있습니다. 일반적으로 해당 데이터는 * single * 열에 저장되어야하며 추가 열은 현재 * name * 열에 포함 된 * data *를 포함해야합니다. –

+0

안녕하세요 @Damien_The_Unbeliever 귀하의 조언을 주셔서 감사합니다, 이것은 내 프로그램의 일부입니다, 나는 같은 순서 번호로 차량의 교통 소득을 기록하려고 노력하고 있으며, 시간이 좀 필요하고 모든 "활성"차량에 평균을 삽입해야합니다 이 작업을 제대로 수행하고 있는지 확실하지 않으므로이 경우 더 많은 행보다 많은 행을 갖는 것이 좋습니다. 고마워요. –

답변

1

열 이름 옆에 '글자'가 추가되어 있어도 필요하지 않습니다. 아래 코드를 사용해보십시오 :

cmd = new SqlCommand("Insert Into [dbo].[Trans_Income](Month, Particular,"+vehicleActive[b]+") VALUES (@Month, @Particular, @vehicleNo)", con); 

당신은 세 번째 열 이름인지 확인 위치 : BJW6719. "예"일 경우 위의 명령을 사용하십시오. 그렇지 않으면 올바른 열 이름을 추가해야합니다.

0

당신은 당신이 간단하게 여기는 arrey로 테이블을 변환 할 수 있습니다까지 .NET 프레임 워크 4.5을 사용하는 경우는

try 
       { 
        var dt = new DataTable(); 
        var cmd = new SqlCommand(); 
        cmd.CommandText = @"Select Vehicle_Number from [dbo].[Vehicle_Status] Where Status = 'Inactive'"; 
            var da = new SqlDataAdapter(cmd); 
        da.Fill(dt); 
       } 
      catch (Exception ex) 
       { 

       } 
      finally 
       { 
        if (cmd.Connection.State == ConnectionState.Open) 
        { 
        cmd.Connection.Close(); 
        } 
       } 

       var vehicleActive= dt.Rows[0].ItemArray.Select(x => x.ToString()).ToArray(); 

for (int i = 0; i < vehicleActive.Length; i++) 
        { 
         cmd = new SqlCommand("Insert Into [dbo].[Trans_Income](Month, Particular,'"+vehicleActive[b]+"') VALUES (@Month, @Particular, @vehicleNo)", con); 

         con.Open(); 


         cmd.Parameters.AddWithValue("@Month", textBox2.Text); 
         cmd.Parameters.AddWithValue("@Particular", textBox2.Text); 
         cmd.Parameters.AddWithValue("@vehicleNo", textBox3.Text); 

         cmd.ExecuteNonQuery(); 
         con.Close();  
        } 

같은 배열을 반복이 더 낫다 수있는 코드

입니다 방법은 코드에서 데이터베이스를 통해 루프와 열 이름에 문제가있을 수 있으므로 코드에서 SQL 쿼리에서 정의하기 전에 SQL Server에서 열 이름을 확인하십시오

+0

서식이 조금씩 바뀌 었습니다. –