
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:
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
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

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

Valora esta pregunta


0