vb.net - 无法设置列 'name' 。该值违反了该列的 MaxLength 限制

标签 vb.net visual-studio datagridview datatable

我有一个包含 5 列的表格。

他们是:

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

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

对于fItemNamefItemType,我得到:

Cannot set Column 'name'. The value violates the MaxLength limit of this column.

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

System.FormatException: Value was either too large or too small for an Int32. ---> System.OverFlowException: Value was either too large or too small for an 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)
);

最佳答案

我相信您的适配器与数据库同步。您可以尝试重新映射,或者尝试将其附加到加载方法中:

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) 会创建一个表示数据的强类型内存缓存。这使您能够在应用程序中使用与数据库具有相同架构的DataSet。但是,如果数据库架构随后发生更改(例如,您更改了列的类型/长度/名称),则缓存不会更新。在“解决方案资源管理器” Pane 中应该有一个名为 [NameOfDB]DataSet.xsd 的文件。双击该文件将打开一个编辑器,允许您编辑 DS 及其所有表。确保它反射(reflect)更新的数据库架构 - 关闭 - 保存 - 重建。

关于vb.net - 无法设置列 'name' 。该值违反了该列的 MaxLength 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20660286/

相关文章:

vb.net - 在 Kofax 文档验证脚本中引用 VB.NET DLL

c - 如何在 C 中存储 10 位浮点值

c++ - Visual Studio 2015 使用较旧的 dll 进行调试

c# - 将 DataGridView 与 C# 和 MySQL 一起使用

c# - Winforms DataGridView在VirtualMode什么时候调用AutoResizeColumn?

c# - 如何使用Datagridview绑定(bind)源C#更新SQL Server数据库

.net - 如何将多个数据 View 合并为一个?

.NET 自定义属性属性?

.net - 将控制台颜色转换为颜色?

asp.net-mvc - 如何在 Visual Studio 2017 中嵌入资源文件?