0

私のデータベースにはこのテーブル構造があります:

CREATE TABLE RIAD (
NumeroR int primary key identity,
 NomR varchar(50),
 AdresseRueR varchar(50),
 CodePostalR int,
  VilleR varchar(50),
 TelephoneR varchar(50),
 NomContactR varchar(50),
 CodeReg int,
 NombreDePlaces int)

そして私はこのフォームを持っています:

ここに画像の説明を入力してください

[Ajouter]ボタンをクリックすると、3つのボタンの上のテキストフィールドからデータベースのテーブルRIADに新しいレコードを追加したいと思います。

これは私が試したコードです:

Public cnx As New SqlConnection("data source=localhost; initial catalog=EFF_TSDI_2009_V1; integrated security=sspi")
    Public ds As New DataSet
    Public adapterRiad As SqlDataAdapter
    Public builderRiad As SqlCommandBuilder

Private Sub MajRiad_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        adapterRiad = New SqlDataAdapter()
        adapterRiad.SelectCommand = New SqlCommand("SELECT  * FROM RIAD", cnx)
        adapterRiad.Fill(ds, "RIAD")
        DataGridView1.DataSource = ds.Tables("RIAD")
        builderRiad = New SqlCommandBuilder(adapterRiad)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dialog As DialogResult = MessageBox.Show("Voulez vous vraiment ajouter cette personne ?", "Confirmation", MessageBoxButtons.YesNo)
        If (dialog = DialogResult.Yes) Then

            ds.Tables("RIAD").Rows.Add(nomR.Text, AdresseRueR.Text, CInt(CodePostalR.Text), VilleR.Text, TelephoneR.Text, NomContactR.Text, _
CInt(CodeReg.Text), CInt(NombreDePlaces.Text))
            For Each c As Control In Me.Controls
                If TypeOf (c) Is TextBox Then
                    c.Text = String.Empty
                End If
            Next
            adapterRiad.InsertCommand = builderRiad.GetInsertCommand
            adapterRiad.Update(ds, "RIAD")

        End If
    End Sub

しかし、ボタンAjouterをクリックすると、次のエラーが発生します。

入力文字列が正しい形式ではありませんでした。NumeroR列に保存できませんでした。予想されるタイプはInt32です。

<eeeee>はNomRテキストフィールドに書き込もうとした値であり、VB.netはNomRテキストフィールドの値を主キーとして新しい行を保存しようとしていますが、主キーはIDです。

4

1 に答える 1

0

Rows.Add()メソッドを使用する代わりに、どのフィールドがどこに行くのかを明示的に示したい場合があります...これはより多くのコードですが、フレームワークがユーザーに代わって仮定を作成するのを防ぎます。

こちらが参考になります。関連するセクションは「型なしデータセットへの新しいレコードの挿入」です。

したがって、次のようなことができます。

Dim newRiadRow As DataRow = ds.Tables("RIAD").NewRow()

newCustomersRow("NomR") = nomR.Text
newCustomersRow("AdresseRueR") = AdresseRueR.Text
'More fields here

ds.Tables("RIAD").Rows.Add(newRiadRow)
于 2013-03-23T00:28:46.593 に答える