Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 无法设置列';名称';。该值违反了此列的MaxLength限制_Vb.net_Visual Studio_Datagridview_Datatable - Fatal编程技术网

Vb.net 无法设置列';名称';。该值违反了此列的MaxLength限制

Vb.net 无法设置列';名称';。该值违反了此列的MaxLength限制,vb.net,visual-studio,datagridview,datatable,Vb.net,Visual Studio,Datagridview,Datatable,我有一个5列的表 它们是: fItemID-Int-IDENTITY主键 fItemName-varchar(50) fItemType-varchar(50) fItemModel-varchar(50) fItemWeight-int 当我尝试使用DataGridView向表中添加数据时,只要将值保持在10个字符以下,就没有问题,但是当我尝试添加11个或更多字符时,在其中三列上会收到错误消息 对于fItemName和fItemType,我得到: 无法设置列“名称”。该值违反了此列的MaxLe

我有一个5列的表

它们是:

fItemID-Int-IDENTITY主键
fItemName-varchar(50)
fItemType-varchar(50)
fItemModel-varchar(50)
fItemWeight-int

当我尝试使用DataGridView向表中添加数据时,只要将值保持在10个字符以下,就没有问题,但是当我尝试添加11个或更多字符时,在其中三列上会收到错误消息

对于fItemNamefItemType,我得到:

无法设置列“名称”。该值违反了此列的MaxLength限制

当我尝试向fItemWeight添加超过10个字符时,我得到:

System.FormatException:值对于Int32太大或太小。-->System.OverFlowException:值对于Int32太大或太小

我不知道为什么会出现这些错误,因为将信息添加到fItemModel非常有效

和往常一样,我使用的是VS2013 Ultimate和VB.Net


以下是表格的所有代码:

Public Class frmBOMNonSteel

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'DbStarFliteSystemsDataset.tblItemsQuery' table. You can move, or remove it, as needed.
        Me.TblItemsQueryTableAdapter.Fill(Me.DbStarFliteSystemsDataset.tblItemsQuery)
        'TODO: This line of code loads data into the 'DbStarFliteSystemsDataset.tblItems' table. You can move, or remove it, as needed.
        Me.TblItemsTableAdapter.Fill(Me.DbStarFliteSystemsDataset.tblItems)
        'TODO: This line of code loads data into the 'DbStarFliteSystemsDataset.tblItems' table. You can move, or remove it, as needed.
        Me.TblItemsTableAdapter.Fill(Me.DbStarFliteSystemsDataset.tblItems)
        'TODO: This line of code loads data into the 'DbStarFliteSystemsDataset.tblItems' table. You can move, or remove it, as needed.
        Me.TblItemsTableAdapter.Fill(Me.DbStarFliteSystemsDataset.tblItems)
        'TODO: This line of code loads data into the 'DbStarFliteSystemsDataset.tblItems' table. You can move, or remove it, as needed.
        Me.TblItemsTableAdapter.Fill(Me.DbStarFliteSystemsDataset.tblItems)
        Me.txtJobNumber.Text = frmParent.ToolStripTextBox1.Text

        With FItemTypeComboBox
            .DataSource = DbStarFliteSystemsDataset.tblItemsQuery
            .ValueMember = "fItemType"
        End With
    End Sub

    Private Sub SteelToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SteelToolStripMenuItem.Click

        Me.Close()
        frmBOMSteel.MdiParent = frmParent
        frmBOMSteel.Show()
        frmBOMSteel.WindowState = FormWindowState.Maximized
    End Sub

    Private Sub NonSteelToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NonSteelToolStripMenuItem.Click

        Me.MdiParent = frmParent
        Me.Show()
    End Sub

    Private Sub WeightsRevisionsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WeightsRevisionsToolStripMenuItem.Click

        Me.Close()
        frmBOMWeightsRevisions.MdiParent = frmParent
        frmBOMWeightsRevisions.Show()
        frmBOMWeightsRevisions.WindowState = FormWindowState.Maximized
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        frmModalNewItem.ShowDialog()
    End Sub

    Private Sub FItemTypeComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles FItemTypeComboBox.SelectedIndexChanged

        Me.FItemNameComboBox.Text = ""

        Dim selected As Object = Me.FItemTypeComboBox.SelectedItem

        If (TypeOf selected Is DataRowView) Then

            Dim row As DataRow = DirectCast(selected, DataRowView).Row
            Dim fItemType As String = CStr(row.Item("fItemType"))
            Dim view As New DataView(DbStarFliteSystemsDataset.tblItems)

            view.RowFilter = String.Format("[fItemType]='{0}'", fItemType)
            Me.FItemNameComboBox.DataSource = view.ToTable(True, "fItemName")
            Me.FItemNameComboBox.DisplayMember = "fItemName"

        End If
    End Sub

    Private Sub TblItemsBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
        Me.Validate()
        Me.TblItemsBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DbStarFliteSystemsDataset)

    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs)
        Me.Validate()
        Me.TblItemsBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DbStarFliteSystemsDataset)

    End Sub

    Private Sub TblItemsBindingNavigatorSaveItem_Click_1(sender As Object, e As EventArgs)
        Me.Validate()
        Me.TblItemsBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DbStarFliteSystemsDataset)

    End Sub

    Private Sub TblItemsBindingNavigatorSaveItem_Click_2(sender As Object, e As EventArgs)
        Me.Validate()
        Me.TblItemsBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.DbStarFliteSystemsDataset)

    End Sub
End Class

以下是我的表格的代码:

CREATE TABLE [dbo].[tblItems] (
    [fItemID]     INT          IDENTITY (1, 1) NOT NULL,
    [fItemName]   VARCHAR (50) NULL,
    [fItemType]   VARCHAR (50) NULL,
    [fItemModel]  VARCHAR (50) NULL,
    [fItemWeight] INT          NULL,
    CONSTRAINT [PK_tblItems] PRIMARY KEY CLUSTERED ([fItemID] ASC)
);

我相信您的适配器与数据库不同步。您可以尝试重新映射,也可以尝试在load方法中追加:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.DbStarFliteSystemsDataset.tblItems.Columns("fItemName").MaxLength = 50
    Me.DbStarFliteSystemsDataset.tblItems.Columns("fItemType").MaxLength = 50
    Me.DbStarFliteSystemsDataset.tblItems.Columns("fItemModel").MaxLength = 50
    '.....
End Sub
重新映射


将DB(数据库)添加到项目中时,VS(Visual Studio)将创建表示数据的强类型内存缓存。这使您能够在应用程序中使用与数据库模式相同的
数据集
。但是,如果数据库模式随后发生更改(例如,您更改了列的类型/长度/名称),则缓存不会更新。在“解决方案资源管理器”窗格中,应该有一个名为
[NameOfDB]DataSet.xsd
的文件。双击此文件将打开一个编辑器,允许您编辑DS及其所有表。确保它反映了更新后的DB模式-close-save-rebuild。

**第一次需要从DB更改表中的maxlength时

试试这个(在-VS 2010-)

转到解决方案资源管理器

右键单击“YourFile”.xsd/open

搜索并右键单击冲突的列名(&C)

性质

根据需要更改MaxLength


保存

我知道这是一篇老文章,但对于那些为类似问题而挣扎的人来说:

我通过简单地从项目浏览器中删除数据集并通过项目菜单中的“添加新数据源”选项重新添加数据集来解决这个问题。只要不删除表单编辑器底部的表引用,就可以进行数据绑定


重新添加数据集时,它的名称必须与删除它之前的名称完全相同。如果操作正确,数据库中任何已编辑的列现在都将恢复同步。

是使用AutoGenerateColumn还是手动添加列?我需要使fItemID add自动生成一个数字,但它似乎也不起作用。。。现在,每个项目都是手动添加的。是否向fItemWeight=字符添加超过10个字符?这个数字字段。无法忽略整数类型=int32的错误。我指的是fItemWeight的数字,而不是字符。我不理解你链接到我的文章。在datatable级别设置所有设置。对于自动生成数字调用,请使用DataTableName.Columns(“”)。AutoIncrement=True。并在DataGridViewName.AutoGenerateColumns中设置,然后设置DataGridViewName.DataSource=DataTableName。问题是,现在我可以添加数据,但在表单关闭后它不会保存数据。。。那么我该如何重新映射它呢?我假设您已经创建了数据库的“实体数据模型”或至少是其中的一部分。对吗?我将表链接到DataGridView,只需将其从“数据源”窗格拖动到窗体。表架构是由Visual Studio生成的还是您自己创建的?此外,我创建了一个新窗体,并将表添加到其中,但它仍然会出现相同的错误。