Добрый день всем. Я написал код в 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-й строке), тогда код будет работать нормально. Любая идея избежать этого поведения для записи в ячейке, независимо от того, какой тип данных я пишу в текстовом поле? Заранее за вашу помощь.