Hola todos,
Estoy tratando de convertir el contenido de un archivo *.sql en en un array
de string, dividiendo por la palabra clave GO. Para luego ejecutar los
comandos en la base de datos a través de un objeto oledb.OleDbCommand
El problema es que el comando (como yo lo hago) no me divide por el GO sino
solo por la G, y según veo en la ayuda este método permite deividir por
varios caracteres.
Lo que pienso es que estoy haciendo algo mal
este es un formulario de prueba que he hecho...les agradezco cualquier
sugerencia, en el ejemplo se vé cómo el comando deja la letro O, lo cual ,e
provoca un error al correr el comando.
Public Class frmSplitTest
Inherits System.Windows.Forms.Form
#Region " Código generado por el Diseñador de Windows Forms "
Public Sub New()
MyBase.New()
'El Diseñador de Windows Forms requiere esta llamada.
InitializeComponent()
'Agregar cualquier inicialización después de la llamada a
InitializeComponent()
End Sub
'Form reemplaza a Dispose para limpiar la lista de componentes.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requerido por el Diseñador de Windows Forms
Private components As System.ComponentModel.IContainer
'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
'Puede modificarse utilizando el Diseñador de Windows Forms.
'No lo modifique con el editor de código.
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.DataGrid1 = New System.Windows.Forms.DataGrid()
Me.Button1 = New System.Windows.Forms.Button()
CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(25, 19)
Me.TextBox1.Multiline = True
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(189, 225)
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = ""
'
'DataGrid1
'
Me.DataGrid1.DataMember = ""
Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
Me.DataGrid1.Location = New System.Drawing.Point(230, 19)
Me.DataGrid1.Name = "DataGrid1"
Me.DataGrid1.Size = New System.Drawing.Size(265, 160)
Me.DataGrid1.TabIndex = 1
'
'Button1
'
Me.Button1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!,
System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,
Byte))
Me.Button1.Location = New System.Drawing.Point(230, 204)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(265, 40)
Me.Button1.TabIndex = 2
Me.Button1.Text = "Split "
'
'frmSplitTest
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(515, 273)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button1,
Me.DataGrid1, Me.TextBox1})
Me.Name = "frmSplitTest"
Me.Text = "frmSplitTest"
CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim dt As New DataTable()
dt.Columns.Add("Comando", Type.GetType("System.String"))
Dim myRow As DataRow
Dim strArray() As String
strArray = Me.TextBox1.Text.Split("GO") 'Este comando divide la cadena pero
cada que encuentra una G
Dim i As Integer
If strArray.Length > 0 Then
For i = 0 To strArray.Length - 1
myRow = dt.NewRow
myRow("Comando") = strArray(i)
dt.Rows.Add(myRow)
Next
End If
Me.DataGrid1.DataSource = dt
End Sub
Private Sub frmSplitTest_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.TextBox1.Text = "Select * from A GO drop table B GO delete from C "
End Sub
End Class
Leer las respuestas