Visual Basic.NET - Error al insertar datos en una bd sql

 
Vista:
Imágen de perfil de Pedro Javier

Error al insertar datos en una bd sql

Publicado por Pedro Javier (23 intervenciones) el 09/04/2017 04:25:36
llevo dias presentando un problema al insertar datos a una de las tablas de mi bd en sql, la tabla se compone en 3 columnas(Codigo, descripcion y um),,el problema me lo da en la columna de la descripcion,ya que hice la prueba solo insertando la columna codigo y um y inserta perfecto, yo cargo esos datos a insertar desde un excel,y luego de ahi lo inserta en una tabla que se crea en ese mismo momento, este es el script de la tabla que lo tengo en un modulo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Public Sub ProductosR()
    'tabla importar clasificador codigo, descrip, um
    sql1.Open()
    Try
        Dim tab As String = "IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ProductosR]') AND type in (N'U'))
DROP TABLE [dbo].[ProductosR]
SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

SET ANSI_PADDING ON

CREATE TABLE [dbo].[ProductosR](
[idproducto] [int] IDENTITY(1,1) NOT NULL,
[codigo] [varchar](max) COLLATE SQL_AltDiction_Pref_CP850_CI_AS NOT NULL,
[descripcion] [varchar](max) COLLATE SQL_AltDiction_Pref_CP850_CI_AS NOT NULL,
[um] [varchar](50) COLLATE SQL_AltDiction_Pref_CP850_CI_AS NOT NULL
) ON [PRIMARY]


SET ANSI_PADDING OFF 
"
        Dim cmd As New SqlCommand(tab, sql1)
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    sql1.Close()
End Sub

y este es el codigo del boton que importa e inserta los datos:
Private Sub btnimporta_Click(sender As Object, e As EventArgs) Handles btnimporta.Click
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
CreaTabla.ProductosR()
    sql1.Open()
 
    Try
        OpenFileDialog1.FileName = Nothing
        OpenFileDialog1.Filter = "Ecxel Files (*.xlsx)|*.xlsx| (*.xls)|*.xls"
        If OpenFileDialog1.ShowDialog = DialogResult.Cancel Then
        Else
            msLibro = OpenFileDialog1.FileName
        End If
    Catch oMsg As Exception
        MsgBox(oMsg.Message, MsgBoxStyle.Critical)
 
    End Try
    'creo la cadena de conexion al excel 
    Try
        Dim msExcelCS As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & msLibro & ";" & "Extended Properties=""Excel 12.0;" & "HDR=YES""" 'HDR=YES : La hoja tiene encabezados en la primera fila
        If Not System.IO.File.Exists(msLibro) Then
            MsgBox("No se encontró el Libro: " & msLibro, MsgBoxStyle.Critical, "Ruta inválida")
            Exit Sub
        End If
        'Selecciona del excel precios topados las columnas Código, Descripción, UM, PrecioT de la hoja con nombre Hoja1
        Dim oAdapter As New OleDbDataAdapter("Select Código, Descripción, UM, PrecioT From [" & msHoja & "$]", msExcelCS)
        Dim ExcelData As New DataSet
        oAdapter.Fill(ExcelData)
        dgv.DataSource = ExcelData.Tables(0)
        ProgressBar1.Minimum = 0
        ProgressBar1.Maximum = dgv.Rows.Count - 2
        For s = 0 To dgv.RowCount - 2
            If dgv.Rows(s).Cells(0).Value.ToString <> "" Then
                codigo = dgv.Rows(s).Cells(0).Value.ToString.Trim
            Else
                codigo = ""
            End If
            If dgv.Rows(s).Cells(1).Value.ToString <> "" Then
                descripcion = dgv.Rows(s).Cells(1).Value.ToString.Trim
            Else
                descripcion = ""
            End If
            If dgv.Rows(s).Cells(2).Value.ToString <> "" Then
                um = dgv.Rows(s).Cells(2).Value.ToString.Trim
            Else
                um = ""
            End If
            Try
                Dim str As String = "Insert into ProductosR (codigo, descripcion, um) values ('" & codigo & "', '" & descripcion & "', '" & um & "')"
                Dim cmd As New SqlCommand(str, sql1)
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            ProgressBar1.Value = s
        Next
    Catch oMsg As Exception
        MsgBox(oMsg.Message, MsgBoxStyle.Critical)
    MsgBox("Las columnas deben tener de nombre: Código, Descripción, UM, PrecioT", MsgBoxStyle.Critical)
    End Try
    sql1.Close()
    dgv.DataSource = Nothing
    ProgressBar1.Value = 0
End Sub
el empiesa a insertar bien,la barra de progreso me lo indica pero luego al parecer el esta detectando en la columna descripcion,,descripciones que tienen parentisis( , comillas ', dobles ",,y como lo inserta de tipo string ahi mismo se para,,este es uno de los errores que me da: Sintaxis incorrecta de 'STD'. Comilla no cerrada despues de la cadena de caracteres ')'. la verdad no se que hacer...queria saber si habia alguna forma de omitir osea que no me tome en cuenta a la hora de importar o de insertar esos caracteres,,ya sean ' "" () etc,solo numeros y letras..muchas gracias de antemano...salu2s
Untitled
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder