日期:2014-05-18  浏览次数:20441 次

一个关于存储过程的问题
CREATE   proc   SetCallBoardMessage(@msg   varchar(1000))--创建加入公告存储过程
as   insert   into   getmsg   values   (@msg,getdate())
GO

这是一个插入公告的存储过程
当我那个里面有空格或者是有标点符号的时候就报错
请问一下是什么原因

------解决方案--------------------
@msg的内容里有 空格或者 标点符号报错么?

那应该和你的程序调用有关,这个存储执行是没有问题的
------解决方案--------------------
有空格或者是有标点符号的时候就报错

-----------

這個應該不會,如果有單引號,倒是有可能。

如果是單引號報錯,你在執行這個存儲過程采用參數的方法,就可以自動處理單引號了。
------解决方案--------------------
--創建測試環境
Create Table getmsg(msg Varchar(100), msgDate DateTime)
GO
--創建存儲過程
CREATE proc SetCallBoardMessage(@msg varchar(1000))--创建加入公告存储过程
as insert into getmsg values (@msg,getdate())
GO
--測試
EXEC SetCallBoardMessage 'hello word! '

Select * From getmsg
GO
--刪除測試環境
Drop Table getmsg
Drop proc SetCallBoardMessage
--結果
/*
msg msgDate
hello word! 2007-08-09 17:24:56.820
*/
------解决方案--------------------
大哥呀,大哥,是谁教你这样调存储过程的呀...........
------解决方案--------------------
SqlCommand cmd = new SqlCommand( "SetCallBoardMessage "+ msg ,con);

------------
這裡的問題
------解决方案--------------------
SqlConnection con = CreateConnection();
SqlCommand cmd = new SqlCommand( "SetCallBoardMessage "+ msg ,con);

改為

SqlConnection con = CreateConnection();
SqlCommand cmd = new SqlCommand();
sqlCmd.CommandText = "SetCallBoardMessage ";
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.Add( "@msg ", msg);