我有一个商店程序&它有4个参数。两个参数是用户通过的表值参数。输出其他两个参数。一个是字符串数据类型,变量名称是message&另一种是int数据类型也是由status.o我想通过ado.net传递4参数。但我不知道为什么vs显示这个错误。
"操作数类型冲突:dbo.tvpPurchase与dbo.tvpPurchaseDetail"不兼容
以下是我的代码
string connectionString = GetConnectionString();
var status = 0;
var message = "";
using (SqlConnection connection = new SqlConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "dbo.spPurchaseDataMaipulation";
command.CommandType = CommandType.StoredProcedure;
SqlParameter parameter;
parameter = command.Parameters.AddWithValue("@purchaseType", CreateSqlDataRecordsForPurchase(purlist));
Parameter = Command.Parameters.AddWithValue("@purchaseDetailType", CreateSqlDataRecordsForPurchaseDetail(purDetai));
Command.Parameters.Add("@message", SqlDbType.VarChar, 500);
Command.Parameters["@message"].Direction = ParameterDirection.Output;
Command.Parameters.Add("@status", SqlDbType.Int);
Command.Parameters["@status"].Direction = ParameterDirection.Output;
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.tvpPurchase";
parameter.TypeName = "dbo.tvpPurchaseDetail";
command.ExecuteNonQuery();
connection.Close();
status = Convert.ToInt32(Command.Parameters["@status"].Value);
message = Command.Parameters["@message"].Value.ToString();
}
}
return new { status = status,message = message};
答案 0 :(得分:0)
问题是您对两个表值参数使用相同的引用。您可以避免这个问题并简化您的代码。
您可以简单地使用Add
的重叠,而不是使用AddWithValue
- 它会返回您刚刚添加的参数的引用。这将使您的代码更简单,更容易:
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "dbo.spPurchaseDataMaipulation";
command.CommandType = CommandType.StoredProcedure;
SqlParameter parameter;
command.Parameters.Add("@purchaseType", SqlDbType.Structured).Value = CreateSqlDataRecordsForPurchase(purlist);
command.Parameters.Add("@purchaseDetailType", SqlDbType.Structured).Value = CreateSqlDataRecordsForPurchaseDetail(purDetai);
Command.Parameters.Add("@message", SqlDbType.VarChar, 500).Direction = ParameterDirection.Output;
Command.Parameters.Add("@status", SqlDbType.Int).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
connection.Close();
status = Convert.ToInt32(Command.Parameters["@status"].Value);
message = Command.Parameters["@message"].Value.ToString();
}