猿问

对 SQL Server 表的更改似乎没有在 Visual Studio 中构建

我有一个使用 Visual Studios 2017 的 C# 前端到 SQL Server 后端。当我最初在数据库中创建我的表时,它是:


CREATE TABLE [dbo].[tblHazard_Reports]

(

    [Id] INT PRIMARY KEY,

    [Badge] INT NOT NULL,

    [Full Name] VARCHAR NOT NULL

)

从那以后,我将其更改为


CREATE TABLE [dbo].[tblHazard_Reports]

(

    [Id] INT IDENTITY(1, 1) PRIMARY KEY, 

    [Badge] INT,

    [Full Name] VARCHAR(MAX)

)

但是,当我运行我的SQLcmd.ExecuteNonQuery()语句时,我会得到列不允许 NULL 或字符串或二进制数据将被截断的错误。尽管我项目中的所有内容似乎都表明我对列进行了更改,但我得到的错误就像我从未接触过它一样。


我在网上寻找在 Visual Studio 中放置正确 ALTER 语句的地方,但我找不到任何东西。如何重建我的表以反映我所做的更改?


这是我的 C# 代码,以防万一。


private void InsertHazardItem(E3_Project.HazardItem currHaz)

{

    using(SqlConnection cnn = new SqlConnection("connectionString"))

    {

        string commandString = "INSERT INTO tblHazard_Reports([ID], [Badge], 

            [Full Name]) VALUES(@ID, @Badge, @Name)";


        using(SqlCommand command = new SqlCommand(commandString, cnn))

        {

            var parameterID = new SqlParameter("@ID",  System.Data.SqlDbType.Int);

            var parameterBadge = new SqlParameter("@Badge",  System.Data.SqlDbType.Int);

            var parameterName = new SqlParameter("@Name", System.Data.SqlDbType.VarChar);


            parameterID.Value = currHaz.ID;

            parameterBadge.Value = currHaz.Badge;

            parameterName.Value = currHaz.Name;


            command.Parameters.Add(parameterID);

            command.Parameters.Add(parameterBadge);

            command.Parameters.Add(parameterName);


            cnn.Open()

            command.ExecuteNonQuery(); //The error is always on this line

        }

    }

}

请注意,ID 应该是自动递增的,但我将其包含在此处,因为再次看来,我对表的更改似乎还没有建立。


白猪掌柜的
浏览 155回答 2
2回答

炎炎设计

由于您将 ID 列定义为 IDENTITY 列,因此数据库会在您插入行时负责设置该值。尝试从 INSERT 语句中删除 ID 列,它应该可以工作。未经请求的提示:如果您的列名中不包含空格,您和曾经使用过您的数据库的每个人都会更快乐。[Full Name] 最好是 FullName。

摇曳的蔷薇

必须在代码中完成对表的更改。就我而言,我最终使用 C# 和 ExecuteNonQuery 来执行此操作,如此处所示。甚至新表也必须用代码创建并直接用代码执行。使用 Visual Studio 工具向我的数据库添加新表似乎并没有实际显示和使用。
随时随地看视频慕课网APP
我要回答