在 System.Data.SqlClient.SqlException 中第一次偶然出现的“Microsoft.Practices.EnterpriseLibrary.Data.DLL”类型的异常~!
在数据写入的时候页面正常,但数据不写入,VS提示异常~!
代码:
string sql = @"insert into FBUY (Code,Name,Funit,Buyno,Amount,Buydata,BuyWay,BuyRes,LifeTime,Manufacturer,StreCode,Res) 
values(@Code,@Name,@Funit,@Buyno,@Amount,@Buydata,@BuyWay,@BuyRes,@LifeTime,@Manufacturer,@StreCode,@Res)";                DbCommand cmd = this.DataBase.GetSqlStringCommand(sql);
          
            DataBase.AddInParameter(cmd, "@Code", DbType.AnsiString, rec.Code);
            DataBase.AddInParameter(cmd, "@Name", DbType.AnsiString, rec.Name);
            DataBase.AddInParameter(cmd, "@Funit", DbType.AnsiString, rec.Funit);
            DataBase.AddInParameter(cmd, "@Buyno", DbType.Int32, rec.Buyno);
            DataBase.AddInParameter(cmd, "@Amount", DbType.Int32, rec.Amount);
            DataBase.AddInParameter(cmd, "@Buydata", DbType.DateTime, rec.Buydata);
            DataBase.AddInParameter(cmd, "@BuyWay", DbType.AnsiString, rec.BuyWay);
            DataBase.AddInParameter(cmd, "@BuyRes", DbType.AnsiString, rec.BuyRes);
            DataBase.AddInParameter(cmd, "@LifeTime", DbType.DateTime, rec.LifeTime);
            DataBase.AddInParameter(cmd, "@Manufacturer", DbType.AnsiString, rec.Manufacturer);
            DataBase.AddInParameter(cmd, "@StreCode", DbType.AnsiString, rec.StreCode);
            DataBase.AddInParameter(cmd, "@Res", DbType.AnsiString, rec.Res);
                       
            if (this.Transaction == null)
            {
                //this.DataBase.ExecuteNonQuery(cmd);
                this.DataBase.ExecuteNonQuery(cmd);
                
            }
            else
            {
                this.DataBase.ExecuteNonQuery(cmd, Transaction);
                
            
            }同样的代码,另一个表就没有问题,大家帮帮看看~!
谢谢~!

解决方案 »

  1.   

    cmd.Parameters.AddWithValue("@Code", "xxxxx");
    ./.........
      

  2.   

    检查各字段传入的值,长度是否超过数据库限制
    值是否错误 特别是DateTime类型的
      

  3.   

    必须用EnterpriseLibrary.Data的方法
    别的表都是这么做的 
    接口文件都写完了
      

  4.   

    USE [TobaccoS]
    GO
    /****** 对象:  Table [dbo].[Fbuy]    脚本日期: 07/09/2010 08:34:52 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Fbuy](
    [Code] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [Name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [Funit] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [Buyno] [float] NULL,
    [Amount] [float] NULL,
    [Buydata] [datetime] NULL,
    [BuyWay] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [BuyRes] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [Lifetime] [datetime] NULL,
    [Manufacturer] [nchar](50) COLLATE Chinese_PRC_CI_AS NULL,
    [StoreCode] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
    [Res] [ntext] COLLATE Chinese_PRC_CI_AS NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
      

  5.   

    所有的数据库值,都可以为null?
      

  6.   

    datetime 默认8位长度 应该不是这个问题啊~
    大家帮我看看~~着急啊~!
      

  7.   

    做了
    错误在
    this.DataBase.ExecuteNonQuery(cmd);
      

  8.   

      两个建议,调试看参数值是否正确 · 然后去管理器里面运行下那句sql 看是否能正常才插入数据
      

  9.   


    把这些
      DataBase.AddInParameter(cmd, "@Code", DbType.AnsiString, rec.Code);
      DataBase.AddInParameter(cmd, "@Name", DbType.AnsiString, rec.Name);
      DataBase.AddInParameter(cmd, "@Funit", DbType.AnsiString, rec.Funit);
      DataBase.AddInParameter(cmd, "@Buyno", DbType.Int32, rec.Buyno);
      DataBase.AddInParameter(cmd, "@Amount", DbType.Int32, rec.Amount);
      DataBase.AddInParameter(cmd, "@Buydata", DbType.DateTime, rec.Buydata);
      DataBase.AddInParameter(cmd, "@BuyWay", DbType.AnsiString, rec.BuyWay);
      DataBase.AddInParameter(cmd, "@BuyRes", DbType.AnsiString, rec.BuyRes);
      DataBase.AddInParameter(cmd, "@LifeTime", DbType.DateTime, rec.LifeTime);
      DataBase.AddInParameter(cmd, "@Manufacturer", DbType.AnsiString, rec.Manufacturer);
      DataBase.AddInParameter(cmd, "@StreCode", DbType.AnsiString, rec.StreCode);
      DataBase.AddInParameter(cmd, "@Res", DbType.AnsiString, rec.Res);都换成上面的形式,不用管类型了
    cmd.Parameters.AddWithValue("@Code", rec.Code);
    ............
      

  10.   

    我觉得是类型问题,你的数据库类型有nchar型,而参数类型你却给的是AnsiString型,一个是unicode,一个是non-Unicode,出错可能性存在