la chaîne déposée est tronquée sur l'insert SqlBulkCopy

c# excel sqlbulkcopy sql-server-2012

Question

J'utilise SqlBulkCopy pour insérer des données Excel dans la table.

L'un des champs est ntext sur la table de destination, mais lorsque les données sont insérées, les données sont tronquées après 255 caractères.

using (OleDbConnection conExcel = new OleDbConnection(connstring))
                {
                    DL_ID = library.Save();

                    conExcel.Open();

                    string sheet1 = conExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString();
                    DataTable dtExcelData = new DataTable();

                    using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT " + Convert.ToString(DL_ID) + " as DL_ID,* FROM [" + sheet1 + "]", conExcel))
                    {
                        oda.Fill(dtExcelData.DefaultView.Table);

                    }
                    conExcel.Close();

                    string consString = ConfigurationManager.ConnectionStrings["mycon"].ConnectionString;
                    using (SqlConnection con = new SqlConnection(consString))
                    {

                        using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                        {
                            sqlBulkCopy.DestinationTableName = "dbo.IMPORTS_LIBRARY_DATA";

                            sqlBulkCopy.ColumnMappings.Add(0,"DL_ID");
                            sqlBulkCopy.ColumnMappings.Add(1,"ILD_OLD_ID");
                            sqlBulkCopy.ColumnMappings.Add(2,"ILD_Desc");
                            sqlBulkCopy.ColumnMappings.Add(3, "ILD_Unit");
                            sqlBulkCopy.ColumnMappings.Add( 4,"ILD_Empty");
                            sqlBulkCopy.ColumnMappings.Add( 5,"ILD_Price1");
                            sqlBulkCopy.ColumnMappings.Add( 6,"ILD_Price2");

                            con.Open();
                            sqlBulkCopy.WriteToServer(dtExcelData);
                            con.Close();
                        }


                    }

                }

le ILD_Desc qui est tronqué est ILD_Desc

J'ai essayé de le changer en nvarchar (max) et il est toujours tronqué. je n'ai pas eu d'erreur, je viens de voir les données tronquées sur la table de destination à 255 caractères.

METTRE À JOUR:

CREATE TABLE [dbo].[IMPORTS_LIBRARY_DATA](
[ILD_ID] [int] IDENTITY(1,1) NOT NULL,
[DL_ID] [int] NULL,
[ILD_OLD_ID] [varchar](50) NULL,
[ILD_Desc] [ntext] NULL,
[ILD_Unit] [nvarchar](50) NULL,
[ILD_Empty] [varchar](50) NULL,
[ILD_Price1] [varchar](50) NULL,
[ILD_Price2] [varchar](50) NULL,
[ILD_Folder1] [varchar](50) NULL,
[ILD_Folder2] [varchar](50) NULL,
[ILD_Folder3] [varchar](50) NULL,
[ILD_Date] [varchar](50) NULL,
 CONSTRAINT [PK_IMPORTS_LIBRARY_DATA] PRIMARY KEY CLUSTERED 
(
[ILD_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,       ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

ALLER

Réponse acceptée

Je pense que les problèmes sont avec le fournisseur OLEDB pour Excel.

Lorsque vous utilisez des fournisseurs OLEDB, le type de données est déterminé automatiquement par le fournisseur en fonction des 8 premières lignes. Si vous avez de longues cellules dans les 8 premières lignes, le type de données sera défini en tant que texte. Sinon, il s'agira d'un type de mémo pouvant contenir 255 caractères. Pour résoudre ce problème Modifiez le paramètre de registre comme indiqué dans l'article suivant de la Base de connaissances: http://support.microsoft.com/kb/281517 ou utilisez le fournisseur Microsoft.Jet.OLEDB pour lire les données.

OBS: Vous pouvez modifier le paramètre de registre appelé TypeGuessRows. La plage de valeurs est comprise entre 0 et 16 (la valeur par défaut est 8), mais si vous définissez 0, le nombre de lignes analysées est 16384.

http://forums.asp.net/t/1913118.aspx?Microsoft+oledb+data+acces+truncates+the+data+length+to+255+characters



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi