Je reçois une erreur
Chaîne ou des données binaires seront tronquées. Les données du paramètre table-value ne sont pas conformes au type de table du paramètre. L'instruction a été terminée.
La procédure stockée est:
CreatePROCEDURE [dbo].[addquestion]
@dt as MyDataTable readonly
AS
BEGIN
insert into questiontbl(Question)
select(Question)
from @dt;
END
Le tableau est:
CREATE TABLE [dbo].[questiontbl]
(
[checkval] [varchar](max) NULL,
[Question] [varchar](max) NULL
)
Code C #:
con.Close();
con.Open();
DataTable sqa = Session["questionlist"] as DataTable;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@dt", sqa);
tvparam.SqlDbType = SqlDbType.Structured;
cmd.ExecuteNonQuery();
Cmd.ExecuteNonQuery()
renvoie l'erreur mentionnée. J'ai apparié le type de données - il est aussi varchar(max)
en type et en table.
J'ai référé beaucoup d'URL mais je n'ai pas eu la solution adéquate pour cela.
La principale raison de ce problème est que nous ne transmettons pas les données dans la longueur spécifiée
Mais dans notre code actuel, nous recevrons les données valides, mais la valeur ne sera pas transmise et résultera du problème mentionné.
Voici le truc,
Lors de la création de la table de données pour le paramètre table, nous devons Créer la colonne dans l’ordre que nous avons créé dans le paramètre table .
Veuillez vérifier le code suivant.
Solution (Ce qui suit fonctionnera)
C #
DataTable users= new DataTable("Users");
users.Columns.Add("EmailAddress", typeof(string));
users.Columns.Add("Content", typeof(string));
DataTable data= users.NewRow();
data["EmailAddress"] = emailAddress;
data["Content"] = content;
Sql
CREATE TYPE [dbo].[ParamEulaEmailUser] AS TABLE(
[EmailAddress] [nvarchar](50) NOT NULL,
[Content] [nvarchar](max) NULL
)
Ce qui suit ne fonctionnera pas
c #
DataTable users= new DataTable("Users");
users.Columns.Add("Content", typeof(string));
users.Columns.Add("EmailAddress", typeof(string));
La raison est la suivante lorsque nous envoyons des données à la procédure stockée, le paramètre table values prend la valeur dans l'ordre indiqué et correspond à la colonne existante dans l'ordre. Donc, le contenu sera vérifié avec l'adresse e-mail dans la procédure stockée et génère l'erreur suivante
Erreur: une chaîne ou des données binaires seraient tronquées. Les données du paramètre table-value ne sont pas conformes au type de table du paramètre
Vous n'avez pas publié la déclaration pour le type défini par l'utilisateur MyDataTable, mais vous devez augmenter la taille de varchar de la colonne Question dans la définition de MyDataTable.
DROP TYPE [dbo].[MyDataTable]
GO
CREATE TYPE [dbo].[MyDataTable] AS TABLE
(
[Question] [varchar](200) NULL --INCREASE THIS VALUE
)
Script un Drop et créer pour la procédure addquestion, ainsi que le type MyDataTable.
Supprimez le proc stocké, supprimez le type MyDataTable.
Editez le script MyDataTable Create comme je l’ai mentionné, exécutez-le, puis créez une partie pour le proc stocké.
La longueur maximale de la colonne cible est inférieure à la valeur que vous essayez d'insérer.
Cliquez avec le bouton droit sur la table dans le gestionnaire SQL et accédez à "Conception" pour visualiser la structure de votre table et les définitions de colonne. augmenter la longueur de la colonne