Sql 字符串或二进制必须被截断

Sql 字符串或二进制必须被截断,sql,Sql,我的C代码有问题。当我执行它时,它说: 字符串或二进制必须被截断 这是我的代码: using (SqlCommand command = Connect.GetConnection().CreateCommand()) { command.CommandType = System.Data.CommandType.Text; command.CommandText = "INSERT INTO Adherent VALUES(@Id,@Nom,@Prenom,@Ad

我的C代码有问题。当我执行它时,它说:

字符串或二进制必须被截断

这是我的代码:

 using (SqlCommand command = Connect.GetConnection().CreateCommand())
 {

      command.CommandType = System.Data.CommandType.Text;
      command.CommandText = "INSERT INTO Adherent VALUES(@Id,@Nom,@Prenom,@Adresse,@N_Tel,@Date_Inscription,@Nbre_Emprunt,@Garentie)";
      command.Parameters.Add("@Nom", System.Data.SqlDbType.NChar).Value = model.Nom;
      command.Parameters.Add("@Prenom", System.Data.SqlDbType.NChar).Value = model.Prenom;
      command.Parameters.Add("@Adresse", System.Data.SqlDbType.NChar).Value = model.Adresse;
      command.Parameters.Add("@N_Tel", System.Data.SqlDbType.Decimal).Value = model.Mobile;
      command.Parameters.Add("@Date_Inscription", System.Data.SqlDbType.DateTime).Value = (object)model.DateInscrit ?? DBNull.Value;
      command.Parameters.Add("@Nbre_Emprunt", System.Data.SqlDbType.Decimal).Value = model.NumbreEmprunt;
      command.Parameters.Add("@Garentie", System.Data.SqlDbType.Decimal).Value = model.Garentie;
      command.Parameters.Add("@Id", System.Data.SqlDbType.Int).Value = model.ID;
      //model.ID = Int32.Parse(command.ExecuteScalar().ToString());
       command.ExecuteNonQuery();            
  }
这是我的数据库:

CREATE TABLE [dbo].[Adherent] (
[Id]               INT        NOT NULL,
[Nom]              NVARCHAR(50) NOT NULL,
[Prenom]           NVARCHAR(50) NOT NULL,
[Adresse]          NVARCHAR(50) NOT NULL,
[N_Tel]            BIGINT        NOT NULL,
[Date_Inscription] DATETIME   NOT NULL,
[Nbre_Emprunt]     INT        NULL,
[Garentie]         FLOAT (53) NULL,
PRIMARY KEY CLUSTERED 
这些是价值观:

 AdhNEW.ID = 123;
 AdhNEW.Nom = "FUSCA";
 AdhNEW.Prenom = "FUSCA";
 AdhNEW.Adresse = "12 rue FUSCA";
 AdhNEW.Mobile = 25698741;
 AdhNEW.DateInscrit = DateTime.Now;
 AdhNEW.NumbreEmprunt = 0;
 AdhNEW.Garentie = 0;

这里只是猜测一下,但是您将N_Tel和Nbre_Emprunt字段定义为BIGINT,然后将值作为Decimal传递给它们

[N_Tel]BIGINT不为空, [NBR_Emprunt]INT NULL

命令参数。Add@N_Tel,System.Data.SqlDbType.Decimal.Value=model.Mobile;
命令参数。Add@Nbre_Emprunt,System.Data.SqlDbType.Decimal.Value=model.NumbreEmprunt

这是因为您试图将数据放入sql列中,但填充的数据大于列大小定义。例如,将21个字符的字符串放入nvarchar 20

我校正了DB和相应的转换, 当我得到所有函数的追随者时,它说:

System.Data.dll中发生类型为“System.InvalidCastException”的未处理异常

其他信息:指定的强制转换无效

下面是我的函数代码:

public IEnumerable<IAdherent> All()
    {
        using (SqlCommand command = Connect.GetConnection().CreateCommand())
        {
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT Id, Nom, Prenom, Adresse, N_Tel, Date_Inscription, Nbre_Emprunt, Garentie FROM Adherent ORDER BY Nom ASC;";
            using (SqlDataReader reader = command.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        yield return (new Adherent()
                        {
                            ID = reader.GetInt32(0),
                            Nom = reader.GetString(1),
                            Prenom = reader.GetString(2),
                            Adresse = reader.GetString(3),
                            Mobile = reader.GetInt64(4),
                            DateInscrit = reader.IsDBNull(5) == false ? (DateTime?)reader.GetDateTime(5) : null,
                            NumbreEmprunt = reader.GetInt32(6),
                            Garentie = reader.GetFloat(7)
                        });
                    }
                }
            }
        }
    }

我的数据库是:[Id]INT NOT NULL、[Nom]NVARCHAR50 NOT NULL、[Prenom]NVARCHAR50 NOT NULL、[adrese]NVARCHAR50 NOT NULL、[N_电话]INT NOT NULL、[Date_铭文]DATETIME NOT NULL、[Nbre_Emprunt]INT NULL、[Garentie]浮点53空,AdhNEW.ID=123;AdhNEW.Nom=FUSCA;AdhNEW.Prenom=FUSCA;AdhNEW.Adresse=FUSCA街12号;AdhNEW.Mobile=25698741;AdhNEW.DateInscrit=DateTime.Now;AdhNEW.NumbreEmprunt=0;AdhNEW.Garentie=0;