2014-09-25 3 views
0

Добрый день всем. Я написал код в vb.net, чтобы использовать форму для добавления строки в файл Excel (xls). Два текстовых поля находятся в форме. Два столбца в файле excel форматируются как текст. Если я вводил любое число в текстовые поля, все работает нормально. Если я ввожу числа и символы или просто символы, я получил сообщение «Ошибка несоответствия типов в выражении критериев» в ExecuteNonQuery. Я уже пробовал много разных способов обойти это, но без какого-либо положительного результата. Мне нужно исправить это, потому что я добавлю другие текстовые поля для ввода текста (текст и цифры, а не только цифры). Пожалуйста, кто-нибудь может мне помочь? Вот мой код. Заранее благодарю за любое предложение.ExecuteNonQuery - несоответствие типов данных в критериях Выражение при добавлении данных (VB.Net и Excel 2010)

Public Class Edit1 

    Public con As New OleDb.OleDbConnection 
    Public dbProvider As String 
    Public dbSource As String 
    Public ds As New DataSet 
    Public da As OleDb.OleDbDataAdapter 
    Public sql As String 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 

     dbProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;" 
     dbSource = "Data Source = c:\test1.xls" 
     con.ConnectionString = dbProvider & dbSource 
     con.Open() 
     sql = "SELECT * FROM [dbdata$]" 
     da = New OleDb.OleDbDataAdapter(sql, con) 
     da.Fill(ds, "table1") 
     con.Close() 
    End Sub 

    Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click 

     Dim cmd As New OleDbCommand 
     Dim str1 As String 
     Dim str2 As String 
     cmd.CommandType = CommandType.Text 
     str1 = TextBox1.Text 
     str2 = TextBox2.Text 
     cmd.CommandText = "INSERT INTO [dbdata$] (item1,item2) VALUES (str1,str2);" 
     cmd.Parameters.AddWithValue("@item1", str1) 
     cmd.Parameters.AddWithValue("@item2", str2) 
     'cmd.Parameters.Add("@item1", TextBox1.Text) 'this generate the same ExecuteNonQuery mismatch error 
     'cmd.Parameters.Add("@item2", TextBox2.Text) 'this generate the same ExecuteNonQuery mismatch error 
     'cmd.Parameters("@item1").Value = TextBox1.Text 'this generate the same ExecuteNonQuery mismatch error 
     'cmd.Parameters("@item2").Value = TextBox2.Text 'this generate the same ExecuteNonQuery mismatch error 
     cmd.Connection = con 
     con.Open() 
     cmd.ExecuteNonQuery() 
     con.Close() 


    End Sub 
End Class 

UPDATE - Ладно, ребята, я работал над этим вопросом. Я сделал очистку листа Excel, удалив все форматированные и заполненные ячейки, оставив только первую строку с именами столбцов. Теперь это работает, но есть еще небольшая проблема. Похоже, ExecuteNonQuery проверяет заполненную последним ячейку, чтобы идентифицировать формат ячейки, который будет использоваться на следующем заполняемом. Итак, поскольку первая строка имеет «item1» и «item2» (без кавычек) в качестве имен столбцов, код записывает числа в столбце 1 с одной цитатой (то есть, если текстовое поле 23, в ячейке будет '23.

Но если я вручную напишу хотя бы одно число (во 2-й строке), тогда код будет работать нормально. Любая идея избежать этого поведения для записи в ячейке, независимо от того, какой тип данных я пишу в текстовом поле? Заранее за вашу помощь.

ответ

0

В последнее время я столкнулся с аналогичной проблемой. Это привело к форматированию ячеек. Я продолжал получать несоответствие типов, хотя я изменил всю настройку столбца. Единственный способ, которым я получил его, наконец, работа заключалась в том, чтобы скопировать все на другой лист в книге с каждым ng отформатирован для текста. Затем я удалил первый лист и переименовал новый в старое имя. После этого он работал нормально.

Другие мудрые, просто вставьте новые столбцы рядом со старым, отформатируйте его до текста, а затем скопируйте и PASTE_SPECIAL, а затем выберите значения. Это избавится от стрелок в верхней левой части каждой ячейки.

Либо фикс отлично работает для меня для добавления, поиска, обновление и т.д.

Надеются, что это помогает,