首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

|M| 存储过程出错:从字符串转换为 datetime 时发生语法异常

2012-01-06 
|M| 存储过程出错:从字符串转换为 datetime 时发生语法错误。CREATEProcedureSearch(@OrderIDint,@MemberID

|M| 存储过程出错:从字符串转换为 datetime 时发生语法错误。
CREATE   Procedure   Search(@OrderID   int,   @MemberID   int,   @TypeClass   nvarchar(8),   @MyDayBegin   datetime,   @MyDayEnd   datetime)
AS
Declare   @sql   nvarchar(1000)
Declare   @iWhere   nvarchar(1000)
Set   @sql= 'SELECT   *   FROM   Order '
Set   @iWhere= '   Where   1=1 '
if   @OrderID   <>   -1
Begin
Set   @iWhere=@iWhere   +   'And   OrderID   =   '   +   convert(nvarchar,@OrderID)
End
if   @MemberID   <>   -1
Begin
Set   @iWhere=@iWhere   +   'And   MemberID   =   '   +   convert(nvarchar,@MemberID)
End
if   @TypeClass   <>   ' '
Begin
Set   @iWhere=@iWhere   +   'And   TypeClass   =   ' ' '   +   @TypeClass   +   ' ' ' '
End
if   @MyDayBegin   <>   convert(datetime, '1900-1-1 ')
Begin
Set   @iWhere=@iWhere   +   '   And   DateDiff(d,MyDay, ' ' '   +     @MyDayBegin   +   ' ' ')   <=   0 '
End
if   @MyDayEnd   <>   convert(datetime, '1900-1-1 ')
Begin
Set   @iWhere=@iWhere   +   '   And   DateDiff(d,MyDay, ' ' '   +   @MyDayEnd   +   ' ' ')   > =0 '
End
Set   @sql=@sql   +   @iWhere
Execute   sp_executesql   @sql
GO
------------------------
提示:从字符串转换为   datetime   时发生语法错误。
还有上面我写的存储过程请大家忧化一下

谢谢


[解决办法]
@MyDayBegin <> convert(datetime, '1900-1-1 ') 改成 @MyDayBegin <> '1900-1-1 '

@MyDayEnd <> convert(datetime, '1900-1-1 ') 改成 @MyDayEnd <> '1900-1-1 '

建议: <> 改成>
[解决办法]
是传参数就报错了,还是执行存储过程的时候出错,如果是执行的时候才出错,执行到那行代码的时候出错?
[解决办法]
添加print语句,调试一下就好了
或者使用VS自带的连接数据库的功能,可以进行断电调试的
[解决办法]
UP下,给出详细的错误提示吧呵呵
[解决办法]
没测试,先发一个

CREATE Procedure Search
(
@OrderID int,
@MemberID int,
@TypeClass nvarchar(8),
@MyDayBegin datetime,
@MyDayEnd datetime
)
AS
Declare @sql nvarchar(1000)
Declare @iWhere nvarchar(1000)
Set @sql= 'SELECT * FROM Order '
Set @iWhere= ' Where 1=1 '
if @OrderID <> -1
Begin
Set @iWhere = @iWhere + ' And OrderID = ' + convert(nvarchar,@OrderID)
End
if @MemberID <> -1
Begin
Set @iWhere = @iWhere + ' And MemberID = ' + convert(nvarchar,@MemberID)
End
if @TypeClass <> ' '
Begin
Set @iWhere = @iWhere + ' And TypeClass = ' ' ' + @TypeClass + ' ' ' '
End
if @MyDayBegin <> '1900-1-1 '
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + Convert(nvarchar(20),@MyDayBegin) + ' ' ') <= 0 '


End
if @MyDayEnd <> '1900-1-1 '
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + Convert(nvarchar(20),@MyDayEnd) + ' ' ') > =0 '
End
Set @sql = @sql + @iWhere
Execute sp_executesql @sql


所有的and 前面加空格
[解决办法]
你这个应该是程序出现问题把,存储过程好像没有错啊
[解决办法]
@MyDayEnd 的类型是DateTime ,你要确定在代码中传来的数据是不是也是DateTime类型的,还是string 的。感觉存储过程没有错,错的是.cs页面中的@MyDayEnd 的类型,是不是没有把string 转换为DateTime ? string date; Parrimeter[ "@MyDayEnd "].Value=Convert.toDateTime( "date ");

[解决办法]
zyciis291()
amandag(高歌)
说的对
[解决办法]
convert(nvarchar(8),@OrderID) 你要保证@OrderID不会超过8个字节
[解决办法]
像这里
convert(nvarchar,@OrderID)
是不是改为
convert(nvarchar(8),@OrderID)
会更好
----------
不,假如你的 @ORderId = 100000000,哈刚好报错了,发生了截断,
如果你要显示指定 var 类型的长度,一定要确保不会发生截断

热点排行