【发布时间】:2018-04-06 04:20:54
【问题描述】:
我有一个 ASP.NET 应用程序,它将数据表传递给 Web 服务,然后从 Web 服务传递给 SQL Server 存储过程。当我将 Web 应用程序和 Web 服务发布到服务器并运行时,它失败了。当我从指向服务器上的 Web 服务的本地主机运行应用程序时,它工作正常。当我从 localhost 运行 Web 应用程序和 Web 服务时,它工作正常。
我做了一些故障排除,发现下面一行是问题,但我不确定如何解决:
cmdCommit.Parameters.AddWithValue(@SourceTable, dtSource);
当我评论上面的行时,一切正常。当我用字符串数据类型替换上面行中对DataTable (dtSource) 的引用时,它可以工作。
这是整个 web 方法,我在 try/catch 块中使用此代码:
DataTable dtSource = ObjectToData(sourceTable);
dtSource.TableName = TableTypeObject;
using (SqlConnection cnn = new SqlConnection(_cnnSqlCapss))
{
SqlCommand cmdCommitChange = new SqlCommand("usp_Stored_Procedure", cnn);
cmdCommitChange.CommandType = CommandType.StoredProcedure;
cmdCommitChange.Parameters.AddWithValue("@Parm1", Value1);
cmdCommitChange.Parameters.AddWithValue("@Parm2", Value2);
cmdCommitChange.Parameters.AddWithValue("@Parm3", dtSource);
var returnParameter = cmdCommitChange .Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
cnn.Open();
cmdCommitChange .ExecuteNonQuery();
var result = returnParameter.Value;
return (int)result;
}
令人困惑的部分是,当我从 localhost 运行 Web 应用程序并引用服务器上的 Web 服务时,它可以工作。我不明白为什么当我从服务器运行 Web 应用程序时它会失败。
当我评论引用 DataTable 的行时,一切正常。
我尝试了以下方法,但仍然没有成功:
SqlParameter tvpParam cmdCommit.Parameters.AddWithValue "@SourceTable", dtSource);
tvpParam.SqlDbType = SqlDbType.Structured;
tvpParam.TypeName = "dbo.SourceTableType";
另外,web 方法没有抛出异常。
【问题讨论】:
-
@SourceTable 的 DB 字段类型是什么?没有 SqlDbType 来传递数据表。这意味着,您不能将数据表添加到 SQL @parameter。
-
SqlDbType.Structured
标签: asp.net sql-server datatable