代码之家  ›  专栏  ›  技术社区  ›  Polo

SQL异常截断字符串或二进制数据时出现奇怪的问题

  •  1
  • Polo  · 技术社区  · 17 年前

    我目前正在为我的工作构建一个应用程序,它在我的PC上运行得非常好,但是我将编译代码放在2008服务器上,使用SQLServer2005运行它,我得到一个sql错误截断数据。

    奇怪的是,它瞄准同一数据库中的同一个表,并试图发送到相同的数据。

    有人有主意吗?

    错误:

    Unhandled Exception: System.Data.SqlClient.SqlException: String or binary data w
    ould be truncated.
    The statement has been terminated.
       at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolea
    n breakConnection)
       at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObj
    ect stateObj)
       at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cm
    dHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, Tds
    ParserStateObject stateObj)
       at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
       at System.Data.SqlClient.SqlDataReader.get_MetaData()
       at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, Run
    Behavior runBehavior, String resetOptionsString)
       at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBe
    havior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
       at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehav
    ior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult
     result)
       at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehav
    ior, RunBehavior runBehavior, Boolean returnStream, String method)
    
    5 回复  |  直到 16 年前
        1
  •  3
  •   Marc Gravell    17 年前

    你能说明一下你现在在做什么吗?一个选项是i18n问题,即2008服务器是否对您的机器具有不同的区域设置?这可能意味着您正在构建一些不同的TSQL(例如,以不同的方式格式化日期),并且它不再适合指定的字段( varchar(10) 这里的修复方法是使用 datetime -但这只是一个例子!

    我认为最好的选择是使用sql开发工具进行sql跟踪;这将使实际发送的内容变得明显。

        2
  •  2
  •   RichardOD    17 年前

    运行SQL Server探查器以确保确实发送了相同的数据。很快就会发现你的一个假设是错误的。

        3
  •  1
  •   mucit    17 年前

        4
  •  0
  •   Polo    17 年前

    我必须在服务器上运行远程调试器,而愚蠢的帐户对于表login.lenght=16 table table_login(varchar15)。。。

        5
  •  0
  •   malenkiy_scot    14 年前

    确保表定义和存储过程定义相同。即 如果你申报 pro_id 像 varchar(10) 存储过程还应该具有相同的 瓦尔查尔(10)