2016-06-17 2 views
1

Я пытаюсь вставить некоторые данные в базу данных доступа, но с некоторым условием. Который должен ввести данные, проверив 2 Текстовые поля и только затем вставьте в базу данных доступа.Как проверить и ввести данные из «2 текстовых полей» на основе доступности данных для доступа из VB .Net

Ознакомить вас больше, пожалуйста, проверьте мой код ..

Imports System.Data.OleDb 
Public Class Form1 
Dim provider As String 
Dim datafile As String 
Dim connString As String 
Dim myConnection As OleDbConnection = New OleDbConnection 
Dim str As String 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
    datafile = "D:\Database\samplech.accdb" 
    connString = provider & datafile 
    myConnection.ConnectionString = connString 
    myConnection.Open() 

    Dim chinsrt1 As String 
    chinsrt1 = "Insert into bkCharacters([bkch01],[bkch02],[bkch03],[bkCh04]) Values (?,?,?,?)" 
    Dim chcmd1 As OleDbCommand = New OleDbCommand(chinsrt1, myConnection) 
    If (String.IsNullOrWhiteSpace(CH1.Text)) Then 
     If (String.IsNullOrWhiteSpace(CHDP1.Text)) Then 
      chcmd1.Parameters.Add(New OleDbParameter("bk01", CType(bkNmbr.Text, String))) 
      chcmd1.Parameters.Add(New OleDbParameter("bk02", CType(CH1.Text, String))) 
      chcmd1.Parameters.Add(New OleDbParameter("bk03", CType(CHDP1.Text, String))) 
      chcmd1.Parameters.Add(New OleDbParameter("bk04", CType(CHSource.Text, String))) 
     Else 
      ' Insert an empty String 
      chcmd1.Parameters.Add(New OleDbParameter("bk01", "")) 
      chcmd1.Parameters.Add(New OleDbParameter("bk02", "")) 
      chcmd1.Parameters.Add(New OleDbParameter("bk03", "")) 
      chcmd1.Parameters.Add(New OleDbParameter("bk04", "")) 
     End If 
    End If 


    Dim chinsrt2 As String 
    chinsrt2 = "Insert into bkCharacters([bkch01],[bkch02],[bkch03],[bkCh04]) Values (?,?,?,?)" 
    Dim chcmd2 As OleDbCommand = New OleDbCommand(chinsrt2, myConnection) 
    If (String.IsNullOrWhiteSpace(CH2.Text)) Then 
     If (String.IsNullOrWhiteSpace(CHDP2.Text)) Then 
    chcmd2.Parameters.Add(New OleDbParameter("bk01", CType(bkNmbr.Text, String))) 
      chcmd2.Parameters.Add(New OleDbParameter("bk02", CType(CH2.Text, String))) 
      chcmd2.Parameters.Add(New OleDbParameter("bk03", CType(CHDP2.Text, String))) 
      chcmd2.Parameters.Add(New OleDbParameter("bk04", CType(CHSource.Text, String))) 
     Else 
      ' Insert an empty String 
      chcmd2.Parameters.Add(New OleDbParameter("bk01", "")) 
      chcmd2.Parameters.Add(New OleDbParameter("bk02", "")) 
      chcmd2.Parameters.Add(New OleDbParameter("bk03", "")) 
      chcmd2.Parameters.Add(New OleDbParameter("bk04", "")) 
     End If 
    End If 



    Try 
     chcmd1.ExecuteNonQuery() 
     chcmd2.ExecuteNonQuery() 
     chcmd1.Dispose() 
     chcmd2.Dispose() 
     myConnection.Close() 

    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 
End Class 

То, что я пытаюсь сделать здесь, чтобы проверить значения CH1.Text и CHDP1.Text и если есть какие-то данные в либо одно из этих текстовых полей, я хочу, чтобы другое поле в доступе было пустым.

Но если есть данные в обоих из них просто вставить соответственно ...

В обоих случаях я хочу также включать bkNmbr.Text и ChSource.Text.

И если нет никаких данных в обоих текстовых (CH1 и CHDP1), я просто не хочу, чтобы обновить данные на всех (не обновление записей)

Пожалуйста, помогите мне, ребята, я застрял здесь.

Thank you.

+0

Вы ищете 'DBNull.Value' http://stackoverflow.com/questions/4722705/how-to-insert-null-into-database-if-form-field-is-empty? – BitAccesser

+0

Нет bro ... У меня нет проблем с вводом нулевых или пустых значений в Access Database ... Моя забота заключается в том, чтобы «ввести данные» на основе условий, указанных в вопросе. – winnu

+0

Так что не так? Ваш недостающий параметр bk03 в 'else'part, но вам нужно, чтобы он соответствовал вашим параметрам запроса. – BitAccesser

ответ

1

Проверьте, не пустое ли одно поле, а затем вставьте, если оба пустых ничего не делают.

If (Not String.IsNullOrWhiteSpace(CH1.Text)) OR (Not String.IsNullOrWhiteSpace(CHDP1.Text)) Then 'check if at least one field is not empty 
    Dim checkNullCH1 as String 
    Dim checkNullCHDP1 as String 

    If String.IsNullOrWhiteSpace(CH1.Text) then 'check if field is empty 
    checkNullCH1 = "" 
    else 
    checkNullCH1 = CH1.Text 
    end if 

    If String.IsNullOrWhiteSpace(CHPD1.Text) then 
    checkNullCHPD1 = "" 
    else 
    checkNullCHPD1 = CHPD1.Text 
    end if 
    chcmd1.Parameters.Add(New OleDbParameter("bk01", CType(bkNmbr.Text, String))) 
    chcmd1.Parameters.Add(New OleDbParameter("bk02", CType(checkNullCH1, String))) 
    chcmd1.Parameters.Add(New OleDbParameter("bk03", CType(checkNullCHPD1, String))) 
    chcmd1.Parameters.Add(New OleDbParameter("bk04", CType(CHSource.Text, String))) 
    chcmd1.ExecuteNonQuery() 
end if 

Alternate вы можете проверить, если оба пусты.

If not ((String.IsNullOrWhiteSpace(CH1.Text)) AND (String.IsNullOrWhiteSpace(CHDP1.Text))) Then 

Это равно другой.

+0

Это работающий брат, но он вставляет 2 строки в доступ, не знаю, почему это делает это, а также еще одна вещь .... bkNmbr.Text всегда будет иметь некоторые данные в нем, но, как я сказал в своем вопросе, если нет данных в CH1.Text и CHDP1.Text, я не хочу вообще обновлять эту запись (полностью игнорировать ее при доступе) .... Учитывая, что у меня все еще есть некоторые данные в bkNmbr.Text – winnu

+0

Вы не записываете 'UPDATE', вы делаете' INSERT', поэтому каждый столбец в строке нуждается в значении (даже 'NULL', если нет данных). Вы удалили часть 'chcmd2' вашего кода, иначе она будет выполняться дважды. – BitAccesser

+0

'If'statement предотвращает' INSERT', если оба поля пусты, независимо от того, что .'bkNmbr.Text' значение. – BitAccesser

Смежные вопросы