【发布时间】:2017-10-24 07:46:53
【问题描述】:
我有 3 台服务器,这些服务器的名称分别为 ServiceServer、DatabaseServer 和 WarehouseServer。
我在 ServiceServer 上有一个 WCF 服务,它调用 DatabaseServer 中的一个存储过程。
public async void UpdateStatus(NajaResult najaresult, string userid, string IsWorn, string FuelSystem, string ValidTest, string SymfaServiceStatus, string NajaServiceStatus)
{
string _FuelSystem = (string.IsNullOrEmpty(FuelSystem)) ? "2" : FuelSystem;
_ctx.Database.ExecuteSqlCommand("EXEC [dbo].[UpdateInquiryStatus] @userid='" + userid + "', @IsWorn='" + IsWorn + "',@FuelSystem='" + _FuelSystem + "',@ValidTest='" + ValidTest + "',@SymfaServiceStatus='" + SymfaServiceStatus + "',@NajaServiceStatus='" + NajaServiceStatus + "' ,"
+ "@Chassis='" + najaresult.Chassis + "',@CarColor=N'" + najaresult.CarColor + "',@MotorNum='" + najaresult.MotorNum + "' ,@Vin='" + najaresult.VinNo + "', @SystemType=N'" + najaresult.SystemType + "',@CarTipe=N'" + najaresult.CarTip + "',@FuelType='" + najaresult.FuelType + "',@Model='" + najaresult.CarModel + "'" + ",@CarType=N'" + najaresult.CarType + "'");
}
这是我的存储过程UpdateInquiryStatus,它位于DatabaseServer:
ALTER PROCEDURE [dbo].[UpdateInquiryStatus]
@userid nvarchar(max),
@IsWorn nvarchar(max),
@FuelSystem nvarchar(max),
@ValidTest nvarchar(max),
@SymfaServiceStatus nvarchar(max),
@NajaServiceStatus nvarchar(max),
@Vin nvarchar(max),
@SystemType nvarchar(max),
@CarTipe nvarchar(max),
@FuelType nvarchar(max),
@Model nvarchar(max),
@Chassis nvarchar(max),
@CarColor nvarchar(max),
@MotorNum nvarchar(max),
@CarType nvarchar(max)
AS
INSERT INTO [PRISYMFA22a1\MASSYMSQLSERVER].[DB].[dbo].AutomotiveTemps
(id, isworn, validtest, CarColor, CarTipe, CarType, Chassis,
FuelSystem, FuelType, Model, MotorNum, SubmitDatetime,
SystemType, UserId, VIN)
VALUES (NEWID(), @IsWorn, @ValidTest, @CarColor, @CarTipe, @CarType, @Chassis,
@FuelSystem, @FuelType, @Model, @MotorNum, GETDATE(),
@SystemType, @userid, @Vin)
作为说明,我在DatabaseServer 和WarehouseServer 之间创建了一个链接服务器。
如您所见,我的程序在WarehouseServer 中插入了一条记录,但出现此错误:
服务器“DatabaseServer”上的 MSDTC 不可用。
但是我的 msdtc 正在运行并且所有防火墙都被禁用。我也在组件服务中打开了所有入站和出站远程。但同样的错误被返回
【问题讨论】:
-
你应该真的使用最合适的数据类型——而不是仅仅出于懒惰而使用
nvarchar(max)。@IsWorn之类的东西听起来像一个布尔标志 - 使用BIT。Id通常是一个数值 - 使用适当的 numeric 数据类型,如INT或DECIMAL等,甚至大多数字符串类型很可能真的不需要能够保存 高达 2 GB 的字符串数据 - 为您的参数使用适当的长度!
标签: sql-server wcf stored-procedures msdtc