【问题标题】:String or Binary Data Would be Truncated…字符串或二进制数据将被截断……
【发布时间】:2013-05-27 05:44:01
【问题描述】:

在我的项目中,我使用随机数生成器函数生成一个随机字符并将其存储在数据库中,该数字生成正确,但在插入数据期间它抛出异常 “字符串或二进制数据将是截断”

我的代码:

protected void trigger()
{  
    try
    {
        DataSet ds = ExamManagement.SP.table2_SP_Selectall().GetDataSet();
        if (ds.Tables[0].Rows.Count > 0)
        {
            string a = RandomNumberGenerator(4);
            string b = RandomNumberGenerator(4);
            string c = RandomNumberGenerator(4);
            ExamManagement.SP.table1_insert(a,b,c).Execute();
        }
    }
    catch (SqlException ex)
    {
        ClientMessaging("Error :"+ex);
    }
}

public static string RandomNumberGenerator(int length)
{
    System.Security.Cryptography.RandomNumberGenerator rng = System.Security.Cryptography.RandomNumberGenerator.Create();

    char[] chars = new char[length];

    //based on your requirment you can take only alphabets or number 
    string validChars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXzZ";
    byte[] bytes = new byte[length-1];
    for (int i = 0; i < length; i++)
    {

        rng.GetBytes(bytes);

        Random rnd = new Random(bytes[0]);

        chars[i] = validChars[rnd.Next(validChars.Length)];

    }

    return (new string(chars));
}

我的 SQL Server 表结构:

  Column1, nvarchar(100),null
  Column2, nvarchar(100),null
  Column3, nvarchar(100),null

我改变的存储过程是,

   Create Procedure Table1_insert    
   (    
    @col1 varchar(max),    
    @col2 varchar(max),    
    @col3 varchar(max)   
   )    
  as    
 BEGIN    
 BEGIN TRY    
 Insert into Table1(Column1,Column2,Column3) values (@col1,@col2,@col3)    
END TRY    
BEGIN CATCH                    
IF @@TRANCOUNT > 0                    
ROLLBACK                    
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int                    
SELECT @ErrMsg = ERROR_MESSAGE(),                    
@ErrSeverity = ERROR_SEVERITY()                    
RAISERROR(@ErrMsg, @ErrSeverity, 1)                    
END CATCH     
END

【问题讨论】:

  • 此消息表示您要填写的内容不适合您的列。因此,您的一列中可能有 100 多个字符。在将变量插入数据库以查看之前,计算变量并输出它。
  • @Yvesr 我已经用 Clientmessaging 检查过了,Randomnumbergenerator 函数只生成四个字符,例如:sDfT
  • 数据大于字段长度不是很明显吗?
  • 尝试使用SQL Profiler 并查看插入表中的实际值
  • @praveen 我没有“SQL Profiler”,因为我系统中安装的 SQL Server 是 SQL Server 2008

标签: c# sql-server


【解决方案1】:

检查您的存储过程。您可能忘记指定参数的长度。例如。 @p1 nvarchar(1000)

【讨论】:

  • 我的SP中指定的参数是.@col1 nvarchar(100), .@col2 nvarchar(100), .@col3 nvarchar(100)
  • table1_insert 方法的规范如何。您是否使用设计器来创建该方法?您可能需要检查参数映射。如果您忘记指定长度,sql server 将假定为一个字符。
  • 我使用存储过程编辑了我的帖子,请查看并给我解决方案.....
  • 我不是在你的存储过程之后,而是在 ExamManagement.SP.table1_insert(a,b,c) 的代码之后。
【解决方案2】:

数据库中存在的列变量的大小小于我发送保存的变量数据所以我收到错误字符串或二进制数据将被截断

我已经通过增加数据库中变量的大小解决了这个错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多