将数据表插入SQL Server表

时间:2018-10-29 08:51:35

标签: c# sql-server

我收到此错误消息:

  

`System.Data.SqlClient.SqlException:'尝试传递具有36列的表值参数,其中相应的用户定义表类型需要23列。

我的数据表中的行数为23。该数据表有36列。

这是我用于将数据表插入SQL Server表中的代码:

static void InsertDataIntoSQLServer(DataTable csvFileData)
{
    using (SqlConnection dbConnection = new SqlConnection(@"Data Source=DESKTOP-LNCGI78\SQLEXPRESS;Initial Catalog=Testdatabase;Integrated Security=SSPI;"))
    using (var cmd = new SqlDataAdapter())
    using (var command = new SqlCommand("InsertTable") { CommandType = CommandType.StoredProcedure })
    {
        command.Connection = dbConnection;
        cmd.InsertCommand = command;

        dbConnection.Open();
        command.Parameters.Add(new SqlParameter("@myTableType", csvFileData));
        command.ExecuteNonQuery();
    }
}

使用的用户定义表是这样的:

CREATE TYPE [dbo].[MyTableType] AS TABLE
(
    [Continuous Continuous] [char](10) NULL,
    [LANGID_409] [char](32) NULL,
    [LANGID_c0a] [char](32) NULL,
    [2] [char](10) NULL,
    [01-Tester Name] [char](14) NULL,
    [03-Product Name] [char](14) NULL,
    [04-Model Name] [char](10) NULL,
    [05-M.O. No.] [char](15) NULL,
    [06-P.O. No.] [char](15) NULL,
    [07-OpName] [char](10) NULL,
    [08-Shift] [char](10) NULL,
    [09-Test SW Name] [char](22) NULL,
    [10-Test SW  Version] [char](3) NULL,
    [11-Test Machine SW] [char](22) NULL,
    [12-Ateq Program No] [char](5) NULL,
    [20-SerialNo] [char](25) NULL,
    [21-Date] [date] NULL,
    [22-Time] [time](7) NULL,
    [23-Test Time] [char](10) NULL,
    [24-Test Result] [char](10) NULL,
    [25-Ateq Result Pressure] [char](10) NULL,
    [26-Ateq Result LeakValue] [char](10) NULL,
    [27-Ateq Result Sealed Comp] [char](10) NULL
)
GO

使用的存储过程:

ALTER PROCEDURE [dbo].[InsertTable]
    @myTableType MyTableType READONLY
AS
BEGIN
    INSERT INTO [dbo].[Table] 
        SELECT * 
        FROM @myTableType
END

考虑到我的csv文件会定期使用新条目进行更新,并因此更新数据表。该插入函数将返回重复的列,还是将擦除现有条目并重写所有表。是否可以仅将新列添加到SQL表中?

0 个答案:

没有答案