2012-08-22 1 views
0

데이터베이스의 목록 뷰에 항목을 삽입하려고했습니다. 레코드를 별도로 삽입하려고하면 더 많은 레코드 (5 개 이상)가 있으면 오래 걸립니다. 임 현재이 코드를 사용하여 :SQL 데이터베이스 액세스에서 여러 줄의 쿼리를 삽입하십시오.

For Each ls As ListViewItem In ListItems.Items 
     strSQL = String.Format("insert into tbltrans (transid,itemcode,itemname,qty,price,[total],btw) values ('{0}','{1}','{2}',{3},{4},'{5}','{6}')", CStr(txtTransId.Text), CStr(ls.Tag), ls.SubItems(0).Text, CDbl(ls.SubItems(1).Text), CDbl(ls.SubItems(2).Text), CDbl(ls.SubItems(3).Text), ((ls.SubItems(5).Text))) 
       objDal.ExecuteQuery(strSQL) 
Next 

그래서, 제가하고 싶은 하나 개의 SQL 쿼리에서 모든 항목을 실행합니다. 나는이 시도했지만 작동하지 않았다 :

strSQL = "insert into tbltrans (transid,itemcode,itemname,qty,price,[total],btw) values " 
For Each ls As ListViewItem In ListItems.Items 
        strSQL += tring.Format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", CStr(txtTransId.Text), CStr(ls.Tag), ls.SubItems(0).Text, CDbl(ls.SubItems(1).Text), CDbl(ls.SubItems(2).Text), CDbl(ls.SubItems(3).Text), ((ls.SubItems(5).Text))) 

       Next 
objdal.executequery(strSQL) 

그것이 세미콜론 실종 있다고 말한다 (;) (";"STRSQL &) 명령문의 끝을, 나는 또한 레코드를 추가하고 시도 , 구문 오류가 발생합니다.

아무도 도와 줄 수 있습니까?

+0

단일 레코드에 대해서도 잘못하고 있습니다. String.Format()은 SQL injection에 취약합니다. –

+0

@Joel이 무엇을 말하고 있는지 명확히하기 위해 매개 변수화 된 쿼리를 고려해야합니다. 확실하지 않은 경우 "SQL 매개 변수가있는 쿼리"에 대한 검색을 수행하십시오 – spacemonkeys

답변

1
당신은 동일한 명령/연결 개체와 같은 같은 (재 구축되지 않음) SQL 문자열을 다시 사용하여 좀 더 잘 할 수

(나는 열 유형과 길이 추측했다) :

strSQL = "insert into tbltrans (transid,itemcode,itemname,qty,price,[total],btw) values (?,?,?,?,?,?,?)" 

Using cn As New OleDbConnection("Connection string here"), _ 
     cmd As New OleDbCommand(strSQL, cn) 

    cmd.Parameters.Add("?", OleDbType.Integer).Value = Integer.Parse(txtTransId.Text) 
    cmd.Parameters.Add("?", OleDbType.VarChar, 10) 
    cmd.Parameters.Add("?", OleDbType.VarChar, 50) 
    cmd.Parameters.Add("?", OleDbType.Integer) 
    cmd.Parameters.Add("?", OleDbType.Decimal) 
    cmd.Parameters.Add("?", OleDbType.Decimal) 
    cmd.Parameters.Add("?", OleDbType.VarChar, 50) 

    cn.Open() 
    For Each ls As ListViewItem In ListItems.Items 
     cmd.Parameters(1).Value = ls.Tag 
     cmd.Parameters(2).Value = ls.SubItems(0).Text 
     cmd.Parameters(3).Value = Integer.Parse(ls.SubItems(1).Text) 
     cmd.Parameters(4).Value = Decimal.Parse(ls.SubItems(2).Text) 
     cmd.Parameters(5).Value = Decimal.Parse(ls.SubItems(3).Text) 
     cmd.Parameters(6).Value = ls.SubItems(5).Text 
     cmd.ExecuteNonQuery() 
    Next ls 

End Using 
+0

Joel, 고마워. 보내 주실 수 있도록 전자 메일로 문의 할 수 있습니까? 너 내 프로젝트 야. 나는 실제로 위의 코드를 이해할 수 없기 때문에 VB와 SQL에 익숙하다. 내 프로젝트를 보내 줄게. –

+0

좋아, 나는 이것을 시도했지만 작동하지 않았다. 기록을 저장하지 못했습니다. –

+0

선이 누락되었습니다. –

관련 문제