Sql 字符串或二进制必须被截断
我的C代码有问题。当我执行它时,它说: 字符串或二进制必须被截断 这是我的代码: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
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;