2

我正在尝试插入到 SQL 数据库表中,但它不起作用。所以我使用 SQL 服务器分析器来查看它是如何构建查询的;它显示的内容如下:

declare @p1 int
set @p1=0
declare @p2 int
set @p2=0
declare @p3 int
set @p3=1
exec InsertProcedureName @ConsumerMovingDetailID=@p1 output, @UniqueID=@p2 output, 
                         @ServiceID=@p3 output, @ProjectID=N'0', @IPAddress=N'66.229.112.168', 
                         @FirstName=N'Mike', @LastName=N'P', @Email=N'mymail@yahoo.com', 
                         @PhoneNumber=N'(254)637-1256', @MobilePhone=NULL, @CurrentAddress=N'', 
                         @FromZip=N'10005', @MoveInAddress=N'', @ToZip=N'33067', 
                         @MovingSize=N'1', @MovingDate=''2009-04-30 00:00:00:000'', 
                               /*        Problem here  ^^^  */
                         @IsMovingVehicle=0, @IsPackingRequired=0, @IncludeInSaveologyPlanner=1
select @p1, @p2, @p3

正如你所看到的,它把双引号日期时间字段周围有两对单引号,以便在 SQL 中产生语法错误。我想知道是否有什么我必须在某处配置的东西?

任何帮助,将不胜感激。

以下是环境详细信息:

  • 视觉工作室 2008
  • .NET 3.5
  • 微软 SQL 服务器 2005

这是我正在使用的 .NET 代码....

//call procedure for results
strStoredProcedureName = "usp_SMMoverSearchResult_SELECT";

Database database = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = database.GetStoredProcCommand(strStoredProcedureName);
dbCommand.CommandTimeout = DataHelper.CONNECTION_TIMEOUT;

database.AddInParameter(dbCommand, "@MovingDetailID", DbType.String, objPropConsumer.ConsumerMovingDetailID);
database.AddInParameter(dbCommand, "@FromZip", DbType.String, objPropConsumer.FromZipCode);
database.AddInParameter(dbCommand, "@ToZip", DbType.String, objPropConsumer.ToZipCode);
database.AddInParameter(dbCommand, "@MovingDate", DbType.DateTime, objPropConsumer.MoveDate);
database.AddInParameter(dbCommand, "@PLServiceID", DbType.Int32, objPropConsumer.ServiceID);
database.AddInParameter(dbCommand, "@FromAreaCode", DbType.String, pFromAreaCode);
database.AddInParameter(dbCommand, "@FromState", DbType.String, pFromState);
database.AddInParameter(dbCommand, "@ToAreaCode", DbType.String, pToAreaCode);
database.AddInParameter(dbCommand, "@ToState", DbType.String, pToState);

DataSet dstSearchResult = new DataSet("MoverSearchResult");
database.LoadDataSet(dbCommand, dstSearchResult, new string[] { "MoverSearchResult" });
4

6 回答 6

3

我怀疑您在日期时间字段中添加单引号,并将其作为字符串发送?不要那样做。对参数使用日期时间类型,不要在其中添加任何引号。

如果您向我们展示代码的 .Net 端,将会有所帮助。

于 2009-04-23T15:00:57.687 回答
1

SP2 或 SP3 应在 Profiler 中解决此问题

于 2009-11-26T15:17:09.290 回答
0

尝试这个:

'2009-04-30 00:00:00.000'

注意单引号和“。” 而不是“:”的毫秒。或者试试这个:

'2009-04-30 00:00:00'

以确保它不是毫秒。

于 2009-04-23T14:55:30.383 回答
0

objPropConsumer.MoveDate 是字符串吗?看起来它填充了一个在开头和结尾都有撇号的字符串。尝试将 objPropConsumer.MoveDate 替换为常量“2009-04-30 00:00:00”,看看是否可行。如果是这样,则问题出在设置或转换 MoveDate 的位置。

于 2009-04-25T00:29:27.270 回答
0

我会在你的数据库类中寻找问题。也许该AddInParameter()方法使用 DateTime 参数执行了一些 jiggery-pokery,例如添加格式化字符串或类似的愚蠢的东西。

对于与 MSSQL 一起使用,CreateStoredProc()绝对应该返回一个实例SqlCommand(您不想使用 DbCommand 的其他子类)。验证这一点,然后确保向 Parameters 集合AddInParameter()添加一个实例,它的属性是并且它的属性是 type 。SqlParameterDbTypeDbType.DateTimeValueSystem.DateTime

一旦将参数正确添加到 a SqlCommand,它应该可以很好地与 MSSQL 存储过程一起使用,也可以与 DateTime 数据一起使用(对我来说,它有无数次)。

于 2009-11-26T15:27:17.990 回答
0

我刚刚遇到了同样的事情——事实证明这两个单引号只出现在分析器中。潜在的(实际)错误是我向存储过程传递了太多参数。

于 2010-06-09T05:30:09.087 回答