【发布时间】:2011-03-30 23:24:49
【问题描述】:
我正在尝试在 asp.net 中的代码后面执行存储过程。我尝试传递的参数是 strErrorMessage,其中包含值 "The transport failed to connect to the server.; "。
查询执行时的错误信息是:The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 1 ("@errMessage"): Data type 0xE7 has an invalid data length or metadata length.
用代码更新
try
{
...
...
...
}
catch (Exception ex)
{
ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Email was not sent - " + ex.Message + "');", true);
string strMessage = ex.Message;
string strStackTrace = ex.StackTrace;
strMessage = strMessage.Replace("\r\n", "; ");
strMessage = strMessage.Replace(" ", "");
strStackTrace = strStackTrace.Replace("\r\n", "; ");
strStackTrace = strStackTrace.Replace(" ", "");
AppErrorLog(strMessage, strStackTrace);
return false;
}
protected void AppErrorLog(string strErrorMessage, string strErrorStackTrace)
{
SqlConnection conErrLog = new SqlConnection(strConn);
string sql = "usp_AppErrorLog_AddRecord";
SqlCommand cmdErrLog = new SqlCommand(sql, conErrLog);
conErrLog.Open();
try
{
cmdErrLog.CommandType = CommandType.StoredProcedure;
cmdErrLog.Parameters.Add(new SqlParameter("@errMessage", SqlDbType.NVarChar, 8000));
cmdErrLog.Parameters["@errMessage"].Value = strErrorMessage;
cmdErrLog.Parameters.Add(new SqlParameter("@errStackTrace", SqlDbType.NVarChar, 8000));
cmdErrLog.Parameters["@errStackTrace"].Value = strErrorStackTrace;
cmdErrLog.Parameters.Add(new SqlParameter("@userID", SqlDbType.VarChar, 12));
cmdErrLog.Parameters["@userID"].Value = User.Identity.Name;
SqlDataAdapter ada = new SqlDataAdapter(cmdErrLog);
cmdErrLog.ExecuteNonQuery();
}
catch(Exception e)
{
ClientScript.RegisterStartupScript(GetType(), "alert", "alert('AppErrorLog - " + e.Message + "');", true);
}
finally
{
conErrLog.Close();
}
}
表中的列数据类型为 nvarchar(MAX)。
任何想法如何解决这个问题?
【问题讨论】:
-
你能提供一些代码来说明你是如何执行命令的吗?
-
奇怪的信息。你能在这里放一些代码吗?
-
您能否从您的 asp 代码中提供一些示例代码,说明您如何定义和传递存储过程参数的值?
-
您的消息参数长度为 48 个字符 - 您的存储过程是否会尝试将此值插入到允许字符数较少的列中?
标签: c# asp.net sql-server-2005 .net-3.5