c# - Web Deploy 上的“字符串或二进制数据将被截断”,而不是在调试模式下
问题描述
我有一个 ASP.Net 应用程序,它将 Excel 行传输到 SQL Server 表,然后它们由存储过程处理(TableA 数据被格式化为 TableB,然后 TableA 被截断)。
直接在 VS 环境中调试时,应用程序和存储过程都可以正常工作,但在 Web 部署中,我得到以下 SQL 异常:
字符串或二进制数据将被截断。
该语句已终止。
我已经将表模式更改为nvarchar(200)
每一列,并ansi_warnings
关闭了存储过程,但似乎没有任何影响该错误。同样,这只是在 web 部署上,这只会让我认为服务器端的用户权限(每个用户在 SQL 上登录为 NT AUTHORITY\NETWORK SERVICE)。
这是应用程序的 C# 端:
if (subeArchivo.HasFile)
{
var fechaYMD = DateTime.Now.ToString("yyyyMMdd");
var fechaHM = DateTime.Now.ToString("hhmm");
string path = string.Concat(Server.MapPath("~/archivoCargado/" + fechaHM + "_" + fechaYMD + "_" + subeArchivo.FileName));
subeArchivo.SaveAs(path);
DataTable dt = ExcelToDataTable(subeArchivo.FileBytes, cbEncabezado.Checked);
gridDT.DataSource = dt;
gridDT.DataBind();
try
{
string cadenaConn = ConfigurationManager.ConnectionStrings["cadenaSQL"].ConnectionString.ToString();
SqlConnection conn = new SqlConnection(cadenaConn);
SqlCommand cmd = new SqlCommand();
SqlBulkCopy bulkcopy = new SqlBulkCopy(cadenaConn);
SqlBulkCopyColumnMapping ID_USU_CAR = new SqlBulkCopyColumnMapping("ID_USU_CAR", "ID_USU_CAR");
bulkcopy.ColumnMappings.Add(ID_USU_CAR);
SqlBulkCopyColumnMapping RUT_DCT = new SqlBulkCopyColumnMapping("RUT_DCT", "RUT_DCT");
bulkcopy.ColumnMappings.Add(RUT_DCT);
SqlBulkCopyColumnMapping TIP_CON = new SqlBulkCopyColumnMapping("TIP_CON", "TIP_CON");
bulkcopy.ColumnMappings.Add(TIP_CON);
SqlBulkCopyColumnMapping ID_CON = new SqlBulkCopyColumnMapping("ID_CON", "ID_CON");
bulkcopy.ColumnMappings.Add(ID_CON);
SqlBulkCopyColumnMapping INI_BEN = new SqlBulkCopyColumnMapping("INI_BEN", "INI_BEN");
bulkcopy.ColumnMappings.Add(INI_BEN);
SqlBulkCopyColumnMapping FIN_BEN = new SqlBulkCopyColumnMapping("FIN_BEN", "FIN_BEN");
bulkcopy.ColumnMappings.Add(FIN_BEN);
SqlBulkCopyColumnMapping MON_CLP = new SqlBulkCopyColumnMapping("MON_CLP", "MON_CLP");
bulkcopy.ColumnMappings.Add(MON_CLP);
bulkcopy.DestinationTableName = "TMP_CAR_DCT_BEN";
bulkcopy.WriteToServer(dt);
lblCarga.Visible = true;
lblCarga.Text = "CARGA A SQL COMPLETADA";
lblSP.Visible = true;
lblSP.Text = "EJECUTANDO VALIDACIONES";
cmd.CommandText = "VAL_DCT_BEN_BETA2";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
lblSP.Text = "VALIDACIÓN COMPLETADA";
}
catch (Exception ex)
{
lblConfirma.Text = ex.Message.ToString();
}
try
{
lblRes.Visible = true;
connSQL.Open();
// PROCESO RESUMEN
SqlCommand selProc = connSQL.CreateCommand();
SqlDataAdapter adaptadorDatos1 = new SqlDataAdapter(selProc);
selProc.CommandText = "SELECT TOP 1 * FROM CON_PRO_BEN ORDER BY CAST(FEC_CAR AS DATETIME) DESC, HOR_CAR DESC";
selProc.CommandType = CommandType.Text;
DataTable tablaProcRes = new DataTable();
adaptadorDatos1.Fill(tablaProcRes);
gridProcRes.DataSource = tablaProcRes;
gridProcRes.DataBind();
gridProcRes.Visible = true;
connSQL.Close();
connSQL.Open();
// PROCESO DESCRIPTIVO
SqlCommand selProcDes = connSQL.CreateCommand();
SqlDataAdapter adaptadorDatos2 = new SqlDataAdapter(selProcDes);
selProcDes.CommandText = "SELECT * FROM CON_PRO_BEN_DES " +
"WHERE FEC_CAR = (SELECT MAX(FEC_CAR) FROM CON_PRO_BEN_DES) AND HOR_CAR = (SELECT MAX(HOR_CAR) FROM CON_PRO_BEN_DES) " +
"ORDER BY HOR_CAR DESC";
selProcDes.CommandType = CommandType.Text;
DataTable tablaProcResDes = new DataTable();
adaptadorDatos2.Fill(tablaProcResDes);
gridProcDes.DataSource = tablaProcResDes;
gridProcDes.DataBind();
gridProcDes.Visible = true;
connSQL.Close();
}
catch (Exception ex)
{
lblResQ.Text = ex.Message.ToString();
}
}
else
lblError.Visible = true;
lblError.Text = "Incidencias en la carga, reintentar.";
解决方案
推荐阅读
- r - 如何使用列索引从 R 中的列中收集值
- javascript - Apollo GraphQL 变量参数名称
- blazor - 如何修复 app.razor 中的 Blazor webassembly 3.2.0 预览 2 更新问题?
- reactjs - 在功能组件中使用道具
- angular - 具有子入口点循环依赖的Angular 9库
- laravel - Laravel 迁移一般错误:1215 无法添加外键约束 Laravel 7.x
- parallel-processing - 我可以将 OpenACC 用于多核 CPU 吗?
- javascript - 将日期转换为 javascript 格式
- r - R 基础图形。指定我要绘制的图表
- angular - 为 PrimeNG MessageService (Angular 8) 创建包装服务时出现问题